summaryrefslogtreecommitdiffstats
path: root/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp
diff options
context:
space:
mode:
authorLenny Maiorani <lenny@colorado.edu>2011-04-28 18:59:43 +0000
committerLenny Maiorani <lenny@colorado.edu>2011-04-28 18:59:43 +0000
commited2cc6ccbb9b5277f5531c2ae36235559dd284a7 (patch)
treec523556c7a80848f439b907cf40ac93d0edb5b43 /clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp
parente07425a5e782f362b7d084be34849aa45611d880 (diff)
downloadbcm5719-llvm-ed2cc6ccbb9b5277f5531c2ae36235559dd284a7.tar.gz
bcm5719-llvm-ed2cc6ccbb9b5277f5531c2ae36235559dd284a7.zip
Eliminates an assert in the strncpy/strncat checker caused by not validating a cast was successful. If the value of an argument was unknown, the cast would result in a NULL pointer which was later being dereferenced.
This fixes Bugzilla #9806. llvm-svn: 130422
Diffstat (limited to 'clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp')
-rw-r--r--clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp
index 8e9c7899b0d..534b887f3b2 100644
--- a/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp
@@ -1017,8 +1017,15 @@ void CStringChecker::evalStrcpyCommon(CheckerContext &C, const CallExpr *CE,
const Expr *lenExpr = CE->getArg(2);
SVal lenVal = state->getSVal(lenExpr);
+ // Cast the length to a NonLoc SVal. If it is not a NonLoc then give up.
NonLoc *strLengthNL = dyn_cast<NonLoc>(&strLength);
+ if (!strLengthNL)
+ return;
+
+ // Cast the max length to a NonLoc SVal. If it is not a NonLoc then give up.
NonLoc *lenValNL = dyn_cast<NonLoc>(&lenVal);
+ if (!lenValNL)
+ return;
QualType cmpTy = C.getSValBuilder().getContext().IntTy;
const GRState *stateTrue, *stateFalse;
OpenPOWER on IntegriCloud