diff options
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp index 4203f790e21..0cf7056a078 100644 --- a/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp @@ -1706,13 +1706,12 @@ void CStringChecker::evalStrcpyCommon(CheckerContext &C, const CallExpr *CE, } else { if (appendK == ConcatFnKind::none) { // strlcpy returns strlen(src) - StateZeroSize = StateZeroSize->BindExpr(CE, LCtx, *strLengthNL); - } else if (dstStrLengthNL) { + StateZeroSize = StateZeroSize->BindExpr(CE, LCtx, strLength); + } else { // strlcat returns strlen(src) + strlen(dst) - SVal retSize = svalBuilder.evalBinOpNN( - state, BO_Add, *strLengthNL, *dstStrLengthNL, sizeTy); - StateZeroSize = - StateZeroSize->BindExpr(CE, LCtx, *(retSize.getAs<NonLoc>())); + SVal retSize = svalBuilder.evalBinOp( + state, BO_Add, strLength, dstStrLength, sizeTy); + StateZeroSize = StateZeroSize->BindExpr(CE, LCtx, retSize); } } C.addTransition(StateZeroSize); |