From: Pavel Labath Date: Wed, 12 Jun 2013 07:45:04 +0000 (+0000) Subject: Fix memory corruption in CStringChecker X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3b8f77d09d0fe9af717bd89b7407d81d18557d71;p=clang Fix memory corruption in CStringChecker 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 --- diff --git a/lib/StaticAnalyzer/Checkers/CStringChecker.cpp b/lib/StaticAnalyzer/Checkers/CStringChecker.cpp index aa1ca6f2f8..932f6316b5 100644 --- a/lib/StaticAnalyzer/Checkers/CStringChecker.cpp +++ b/lib/StaticAnalyzer/Checkers/CStringChecker.cpp @@ -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(); \ - TheChecker->Filter.Check##name = true; \ + mgr.registerChecker()->Filter.Check##name = true; \ } REGISTER_CHECKER(CStringNullArg)