diff --git a/src/clusterfuzz/_internal/tests/core/crash_analysis/stack_parsing/stack_analyzer_data/v8_error_with_small_number.txt b/src/clusterfuzz/_internal/tests/core/crash_analysis/stack_parsing/stack_analyzer_data/v8_error_with_small_number.txt new file mode 100644 index 00000000000..0706c922b17 --- /dev/null +++ b/src/clusterfuzz/_internal/tests/core/crash_analysis/stack_parsing/stack_analyzer_data/v8_error_with_small_number.txt @@ -0,0 +1,37 @@ + +Funky failure found for function: foo /mnt/scratch0/clusterfuzz/bot/inputs/disk/fuzz-67.js:123 +Some data: +Foo bar 1 +Baz bar 2 +... +More Data (foo = 0) +# +# Fatal error in ../../src/foo/bar.cc, line 123 +# Funky failure at token 13 +# +# +# +#FailureMessage Object: 0xdeadbeef +==== C stack trace =============================== + /mnt/scratch0/clusterfuzz/bot/builds/v8-asan_linux-debug_8cf/revisions/libv8_libbase.so(V8_Fatal(char const*, int, char const*, ...)+0x67c) [0xdeadbeef] + /mnt/scratch0/clusterfuzz/bot/builds/v8-asan_linux-debug_8cf/revisions/libv8.so(void v8::internal::foo::Bar::Baz1()+0x67c) [0xdeadbeef] + /mnt/scratch0/clusterfuzz/bot/builds/v8-asan_linux-debug_8cf/revisions/libv8.so(void v8::internal::foo::Bar::Baz2()+0x67c) [0xdeadbeef] + /mnt/scratch0/clusterfuzz/bot/builds/v8-asan_linux-debug_8cf/revisions/libv8.so(void v8::internal::foo::Bar::Baz3()+0x67c) [0xdeadbeef] + /mnt/scratch0/clusterfuzz/bot/builds/v8-asan_linux-debug_8cf/revisions/libv8.so(void v8::internal::foo::Bar::Baz4()+0x67c) [0xdeadbeef] +AddressSanitizer:DEADLYSIGNAL +================================================================= +==12345==ERROR: AddressSanitizer: ABRT on unknown address 0xdeadbeef (pc 0xdeadbeef bp 0xdeadbeef sp 0xdeadbeef T0) +SCARINESS: 10 (signal) + #1 0x7e6abaebaa4b in V8_Fatal(char const*, int, char const*, ...) src/base/logging.cc:123:1 + #2 0x7e6ab34d5aae in v8::internal::foo::Bar::Baz1() src/foo/bar.cc:123:1 + #3 0x7e6ab34d5aae in v8::internal::foo::Bar::Baz2() src/foo/bar.cc:123:1 + #4 0x7e6ab34d5aae in v8::internal::foo::Bar::Baz3() src/foo/bar.cc:123:1 + #5 0x7e6ab34d5aae in v8::internal::foo::Bar::Baz4() src/foo/bar.cc:123:1 +==12345==Register values: +rax = 0x0000000000000000 rbx = 0x0000000000000000 rcx = 0x0000000000000000 rdx = 0x0000000000000000 +rdi = 0x0000000000000002 rsi = 0x0000000000000000 rbp = 0x0000000000000000 rsp = 0x0000000000000000 + r8 = 0x0000000000000000 r9 = 0x0000000000000000 r10 = 0x0000000000000000 r11 = 0x0000000000000000 +r12 = 0x0000000000000000 r13 = 0x0000000000000000 r14 = 0x0000000000000000 r15 = 0x0000000000000000 +AddressSanitizer can not provide additional info. +SUMMARY: AddressSanitizer: ABRT /build/glibc-LcI20x/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:51:1 in raise +==45454==ABORTING \ No newline at end of file diff --git a/src/clusterfuzz/_internal/tests/core/crash_analysis/stack_parsing/stack_analyzer_test.py b/src/clusterfuzz/_internal/tests/core/crash_analysis/stack_parsing/stack_analyzer_test.py index 314406b4ec6..68178f95dcc 100644 --- a/src/clusterfuzz/_internal/tests/core/crash_analysis/stack_parsing/stack_analyzer_test.py +++ b/src/clusterfuzz/_internal/tests/core/crash_analysis/stack_parsing/stack_analyzer_test.py @@ -1330,6 +1330,21 @@ def test_v8_maglev_type_error(self): expected_state, expected_stacktrace, expected_security_flag) + def test_v8_error_with_small_number(self): + """Test a v8 error with a small number (see https://crbug.com/437859892).""" + data = self._read_test_data('v8_error_with_small_number.txt') + expected_type = 'Fatal error' + expected_address = '' + expected_state = ('Funky failure at token NUMBER in bar.cc\n' + 'v8::internal::foo::Bar::Baz1\n' + 'v8::internal::foo::Bar::Baz2\n') + expected_stacktrace = data + expected_security_flag = False + + self._validate_get_crash_data(data, expected_type, expected_address, + expected_state, expected_stacktrace, + expected_security_flag) + def test_generic_segv(self): """Test a SEGV caught by a generic signal handler.""" data = self._read_test_data('generic_segv.txt') diff --git a/src/clusterfuzz/stacktraces/__init__.py b/src/clusterfuzz/stacktraces/__init__.py index aef32306211..78cd0f94e44 100644 --- a/src/clusterfuzz/stacktraces/__init__.py +++ b/src/clusterfuzz/stacktraces/__init__.py @@ -1403,10 +1403,12 @@ def filter_addresses_and_numbers(stack_frame): # Cases that we are avoiding: # - source.cc:1234 # - libsomething-1.0.so (to avoid things like NUMBERso in replacements) - number_expression = r'''(?= 4 digits - |(?<=[@#])[0-9]+) # or preceeded by @ or # - (?![A-Za-z0-9.]) # not followed by any of these + # - very small integer comparisons, e.g. "x >= NUMBER" for "x >= 1" + number_expression = r'''(?= 4 digits + |(?<=\ )[0-9]{2,} # or >= 2 digits after space + |(?<=[@#])[0-9]+) # or preceeded by @ or # + (?![A-Za-z0-9.]) # not followed by any of these ''' return re.sub(number_expression, 'NUMBER', result, flags=re.X)