Skip to content

Commit

Permalink
[analyzer] Prevent crash due to missing EventDispatch in corner case
Browse files Browse the repository at this point in the history
Random testing revealed it's possible to crash the analyzer through a rare
command line invocation:

clang -cc1 -analyze -analyzer-checker=nullability empty.c

where the source file, empty.c is an empty source file. This change simply
registers the ImplictNullDeref Event Dispatcher as is done in other similar
checks to avoid the crash.

clang: <root>/clang/lib/StaticAnalyzer/Core/CheckerManager.cpp:56:
   void clang::ento::CheckerManager::finishedCheckerRegistration():
     Assertion `Event.second.HasDispatcher && "No dispatcher registered for an event"' failed.

PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/

Stack dump:
0.      Program arguments: clang -cc1 -analyze -analyzer-checker=nullability nullability-nocrash.c
 #0 ...
 ...
 #7 <addr> clang::ento::CheckerManager::finishedCheckerRegistration()
 #8 <addr> clang::ento::CheckerManager::CheckerManager(clang::ASTContext&,
             clang::AnalyzerOptions&, clang::Preprocessor const&,
             llvm::ArrayRef<std::__cxx11::basic_string<char, std::char_traits<char>,
             std::allocator<char>>>, llvm::ArrayRef<std::function<void (clang::ento::CheckerRegistry&)>>)
  • Loading branch information
Vince Bridgers committed Sep 4, 2024
1 parent 9a2fd97 commit 7e37383
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 0 deletions.
1 change: 1 addition & 0 deletions clang/lib/StaticAnalyzer/Checkers/NullabilityChecker.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ class NullabilityChecker
check::PostCall, check::PostStmt<ExplicitCastExpr>,
check::PostObjCMessage, check::DeadSymbols, eval::Assume,
check::Location, check::Event<ImplicitNullDerefEvent>,
/*EventDispatcher<ImplicitNullDerefEvent>,*/
check::BeginFunction> {

public:
Expand Down
4 changes: 4 additions & 0 deletions clang/test/Analysis/nullability-nocrash.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
// RUN: %clang_analyze_cc1 -w -analyzer-checker=nullability \
// RUN: -analyzer-output=text -verify %s
//
// expected-no-diagnostics

0 comments on commit 7e37383

Please sign in to comment.