Skip to content

Commit 32ec5fd

Browse files
committed
Add detection for Chromium NOTREACHED()s
This makes sure that NOTREACHED()s are classified as CHECK failures and handled similarly.
1 parent 13fb6f2 commit 32ec5fd

File tree

3 files changed

+71
-1
lines changed

3 files changed

+71
-1
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
[1201/130354.771719:FATAL:url_idna_icu.cc(58)] NOTREACHED hit. failed to open UTS46 data with error: U_FILE_ACCESS_ERROR. If you see this error message in a test environment your test environment likely lacks the required data tables for libicu. See https://crbug.com/778929.
2+
#0 0x7ab1dca041f2 base::debug::CollectStackTrace()
3+
#1 0x7ab1dc9d69fd base::debug::StackTrace::StackTrace()
4+
#2 0x7ab1dc847fd3 logging::LogMessage::~LogMessage()
5+
#3 0x7ab1dc849348 logging::LogMessage::~LogMessage()
6+
#4 0x7ab1dc810b84 logging::CheckError::~CheckError()
7+
#5 0x7ab1dbbdb465 url::(anonymous namespace)::CreateIDNA()
8+
#6 0x7ab1dbbdb2fa url::IDNToASCII()
9+
#7 0x7ab1dbbb9a31 url::(anonymous namespace)::DoIDNHost()
10+
#8 0x7ab1dbbb8ce1 url::(anonymous namespace)::DoComplexHost()
11+
#9 0x7ab1dbbb7b9f url::(anonymous namespace)::DoHost<>()
12+
#10 0x7ab1dbbb7adc url::CanonicalizeHost()
13+
#11 0x7ab1dbbca588 url::(anonymous namespace)::DoCanonicalizeStandardURL<>()
14+
#12 0x7ab1dbbca202 url::CanonicalizeStandardURL()
15+
#13 0x7ab1dbbd2e06 url::(anonymous namespace)::DoCanonicalize<>()
16+
#14 0x7ab1dbbd26be url::Canonicalize()
17+
#15 0x7ab1dbb9c9cf GURL::InitCanonical<>()
18+
#16 0x563f6f97750e privacy_sandbox::ParseAttestationsFromStream()
19+
#17 0x563f6f976306 LLVMFuzzerTestOneInput
20+
#18 0x563f6f99fbdc fuzzer::Fuzzer::ExecuteCallback()
21+
#19 0x563f6f98b720 fuzzer::RunOneTest()
22+
#20 0x563f6f990370 fuzzer::FuzzerDriver()
23+
#21 0x563f6f984b2b main
24+
#22 0x7ab1c6c42083 __libc_start_main
25+
#23 0x563f6f95eb4a _start
26+
UndefinedBehaviorSanitizer:DEADLYSIGNAL
27+
==2282163==ERROR: UndefinedBehaviorSanitizer: TRAP on unknown address 0x000000000000 (pc 0x7ab1dc849177 bp 0x7ffc8f7379c0 sp 0x7ffc8f736920 T2282163)
28+
#0 0x7ab1dc849177 in ImmediateCrash base/immediate_crash.h:146:3
29+
#1 0x7ab1dc849177 in logging::LogMessage::~LogMessage() base/logging.cc:954:7
30+
#2 0x7ab1dc849347 in logging::LogMessage::~LogMessage() base/logging.cc:699:27
31+
#3 0x7ab1dc810b83 in logging::NotReachedError::~NotReachedError() base/check.cc:267:3
32+
#4 0x7ab1dbbdb464 in url::(anonymous namespace)::CreateIDNA(bool) url/url_idna_icu.cc:58:5
33+
#5 0x7ab1dbbdb2f9 in GetUIDNA url/url_idna_icu.cc:0
34+
#6 0x7ab1dbbdb2f9 in url::IDNToASCII(std::__Cr::basic_string_view<char16_t, std::__Cr::char_traits<char16_t>>, url::CanonOutputT<char16_t>*) url/url_idna_icu.cc:97:18
35+
#7 0x7ab1dbbb9a30 in url::(anonymous namespace)::DoIDNHost(char16_t const*, unsigned long, url::CanonOutputT<char>*) url/url_canon_host.cc:217:8
36+
#8 0x7ab1dbbb8ce0 in url::(anonymous namespace)::DoComplexHost(char const*, unsigned long, bool, bool, url::CanonOutputT<char>*) url/url_canon_host.cc:318:10
37+
#9 0x7ab1dbbb7b9e in void url::(anonymous namespace)::DoHost<char, unsigned char>(char const*, url::Component const&, url::CanonOutputT<char>*, url::CanonHostInfo*) url/url_canon_host.cc:393:7
38+
#10 0x7ab1dbbb7adb in url::CanonicalizeHost(char const*, url::Component const&, url::CanonOutputT<char>*, url::Component*) url/url_canon_host.cc:424:3
39+
#11 0x7ab1dbbca587 in bool url::(anonymous namespace)::DoCanonicalizeStandardURL<char, unsigned char>(url::URLComponentSource<char> const&, url::Parsed const&, url::SchemeType, url::CharsetConverter*, url::CanonOutputT<char>*, url::Parsed*) url/url_canon_stdurl.cc:57:16
40+
#12 0x7ab1dbbca201 in url::CanonicalizeStandardURL(char const*, int, url::Parsed const&, url::SchemeType, url::CharsetConverter*, url::CanonOutputT<char>*, url::Parsed*) url/url_canon_stdurl.cc:152:10
41+
#13 0x7ab1dbbd2e05 in bool url::(anonymous namespace)::DoCanonicalize<char>(char const*, int, bool, url::(anonymous namespace)::WhitespaceRemovalPolicy, url::CharsetConverter*, url::CanonOutputT<char>*, url::Parsed*) url/url_util.cc:283:15
42+
#14 0x7ab1dbbd26bd in url::Canonicalize(char const*, int, bool, url::CharsetConverter*, url::CanonOutputT<char>*, url::Parsed*) url/url_util.cc:774:10
43+
#15 0x7ab1dbb9c9ce in void GURL::InitCanonical<std::__Cr::basic_string_view<char, std::__Cr::char_traits<char>>, char>(std::__Cr::basic_string_view<char, std::__Cr::char_traits<char>>, bool) url/gurl.cc:76:15
44+
#16 0x563f6f97750d in privacy_sandbox::ParseAttestationsFromStream(std::__Cr::basic_istream<char, std::__Cr::char_traits<char>>&) components/privacy_sandbox/privacy_sandbox_attestations/privacy_sandbox_attestations_parser.cc:86:28
45+
#17 0x563f6f976305 in TestOneProtoInput components/privacy_sandbox/privacy_sandbox_attestations/privacy_sandbox_attestations_parser_proto_fuzzer.cc:29:3
46+
#18 0x563f6f976305 in LLVMFuzzerTestOneInput components/privacy_sandbox/privacy_sandbox_attestations/privacy_sandbox_attestations_parser_proto_fuzzer.cc:19:1
47+
#19 0x563f6f99fbdb in fuzzer::Fuzzer::ExecuteCallback(unsigned char const*, unsigned long) third_party/libFuzzer/src/FuzzerLoop.cpp:614:13
48+
#20 0x563f6f98b71f in fuzzer::RunOneTest(fuzzer::Fuzzer*, char const*, unsigned long) third_party/libFuzzer/src/FuzzerDriver.cpp:327:6
49+
#21 0x563f6f99036f in fuzzer::FuzzerDriver(int*, char***, int (*)(unsigned char const*, unsigned long)) third_party/libFuzzer/src/FuzzerDriver.cpp:862:9
50+
#22 0x563f6f984b2a in main third_party/libFuzzer/src/FuzzerMain.cpp:20:10
51+
#23 0x7ab1c6c42082 in __libc_start_main /build/glibc-BHL3KM/glibc-2.31/csu/libc-start.c:308:16
52+
#24 0x563f6f95eb49 in _start

src/clusterfuzz/_internal/tests/core/crash_analysis/stack_parsing/stack_analyzer_test.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2751,6 +2751,24 @@ def test_check_log_message(self):
27512751
expected_state, expected_stacktrace,
27522752
expected_security_flag)
27532753

2754+
def test_notreached_log_message(self):
2755+
"""Tests Chromium NOTREACHED()s as CHECK failures."""
2756+
data = self._read_test_data('notreached_log_message.txt')
2757+
expected_type = 'CHECK failure'
2758+
expected_address = ''
2759+
expected_state = (
2760+
'failed to open UTS46 data with error: U_FILE_ACCESS_ERROR. If you see this error\n'
2761+
'url::CreateIDNA\n'
2762+
'url::IDNToASCII\n'
2763+
)
2764+
expected_stacktrace = data
2765+
expected_security_flag = False
2766+
2767+
environment.set_value('ASSERTS_HAVE_SECURITY_IMPLICATION', False)
2768+
self._validate_get_crash_data(data, expected_type, expected_address,
2769+
expected_state, expected_stacktrace,
2770+
expected_security_flag)
2771+
27542772
def test_asan_container_overflow(self):
27552773
"""Test an ASan container overflow."""
27562774
data = self._read_test_data('asan_container_overflow_read.txt')

src/clusterfuzz/stacktraces/constants.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@
8585
CFI_NODEBUG_ERROR_MARKER_REGEX = re.compile(
8686
r'CFI: Most likely a control flow integrity violation;.*')
8787
CHROME_CHECK_FAILURE_REGEX = re.compile(
88-
r'\s*\[[^\]]*[:]([^\](]*).*\].*Check failed[:]\s*(.*)')
88+
r'\s*\[[^\]]*[:]([^\](]*).*\].*(?:Check failed:|NOTREACHED hit.)\s*(.*)')
8989
CHROME_STACK_FRAME_REGEX = re.compile(
9090
r'[ ]*(#(?P<frame_id>[0-9]+)[ ]' # frame id (2)
9191
r'([xX0-9a-fA-F]+)[ ])' # addr (3)

0 commit comments

Comments
 (0)