]> granicus.if.org Git - clang/commitdiff
Fix memory corruption in CStringChecker
authorPavel Labath <labath@google.com>
Wed, 12 Jun 2013 07:45:04 +0000 (07:45 +0000)
committerPavel Labath <labath@google.com>
Wed, 12 Jun 2013 07:45:04 +0000 (07:45 +0000)
Summary:
"register" functions for the checker were caching the checker objects in a
static variable. This caused problems when the function is called with a
different CheckerManager.

Reviewers: klimek

CC: cfe-commits
Differential Revision: http://llvm-reviews.chandlerc.com/D955

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@183823 91177308-0d34-0410-b5e6-96231b3b80d8

lib/StaticAnalyzer/Checkers/CStringChecker.cpp

index aa1ca6f2f809d5dddeae2eec5b043f52f261fb96..932f6316b555919694c069f237dd9b965809d81b 100644 (file)
@@ -2018,10 +2018,7 @@ void CStringChecker::checkDeadSymbols(SymbolReaper &SR,
 
 #define REGISTER_CHECKER(name) \
 void ento::register##name(CheckerManager &mgr) {\
-  static CStringChecker *TheChecker = 0; \
-  if (TheChecker == 0) \
-    TheChecker = mgr.registerChecker<CStringChecker>(); \
-  TheChecker->Filter.Check##name = true; \
+  mgr.registerChecker<CStringChecker>()->Filter.Check##name = true; \
 }
 
 REGISTER_CHECKER(CStringNullArg)