diff options
Diffstat (limited to 'clang/lib/StaticAnalyzer/Checkers/ReturnPointerRangeChecker.cpp')
-rw-r--r-- | clang/lib/StaticAnalyzer/Checkers/ReturnPointerRangeChecker.cpp | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/clang/lib/StaticAnalyzer/Checkers/ReturnPointerRangeChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/ReturnPointerRangeChecker.cpp index abd1a074b487..599d4f306aa1 100644 --- a/clang/lib/StaticAnalyzer/Checkers/ReturnPointerRangeChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/ReturnPointerRangeChecker.cpp @@ -16,6 +16,7 @@ #include "clang/StaticAnalyzer/Core/Checker.h" #include "clang/StaticAnalyzer/Core/CheckerManager.h" #include "clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h" +#include "clang/StaticAnalyzer/Core/PathSensitive/DynamicSize.h" #include "clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h" using namespace clang; @@ -51,15 +52,14 @@ void ReturnPointerRangeChecker::checkPreStmt(const ReturnStmt *RS, // pointer casts. if (Idx.isZeroConstant()) return; + // FIXME: All of this out-of-bounds checking should eventually be refactored // into a common place. + DefinedOrUnknownSVal ElementCount = getDynamicElementCount( + state, ER->getSuperRegion(), C.getSValBuilder(), ER->getValueType()); - DefinedOrUnknownSVal NumElements - = C.getStoreManager().getSizeInElements(state, ER->getSuperRegion(), - ER->getValueType()); - - ProgramStateRef StInBound = state->assumeInBound(Idx, NumElements, true); - ProgramStateRef StOutBound = state->assumeInBound(Idx, NumElements, false); + ProgramStateRef StInBound = state->assumeInBound(Idx, ElementCount, true); + ProgramStateRef StOutBound = state->assumeInBound(Idx, ElementCount, false); if (StOutBound && !StInBound) { ExplodedNode *N = C.generateErrorNode(StOutBound); @@ -91,6 +91,6 @@ void ento::registerReturnPointerRangeChecker(CheckerManager &mgr) { mgr.registerChecker<ReturnPointerRangeChecker>(); } -bool ento::shouldRegisterReturnPointerRangeChecker(const LangOptions &LO) { +bool ento::shouldRegisterReturnPointerRangeChecker(const CheckerManager &mgr) { return true; } |