aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp
diff options
context:
space:
mode:
authorBalazs Benics <benicsbalazs@gmail.com>2023-12-04 17:53:23 +0100
committerBalazs Benics <benicsbalazs@gmail.com>2023-12-28 16:06:21 +0100
commita49cf6c14ad498244fee6026da59cfdcdad6b80c (patch)
tree6dfc32f74575b7153e5552c0186d86117b0670b7 /clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp
parentd1856b2f18c412f8ffbeee30e6e0316c197c143c (diff)
downloadllvm-a49cf6c14ad498244fee6026da59cfdcdad6b80c.zip
llvm-a49cf6c14ad498244fee6026da59cfdcdad6b80c.tar.gz
llvm-a49cf6c14ad498244fee6026da59cfdcdad6b80c.tar.bz2
[analyzer] Fix "sprintf" parameter modeling in CStringChecker
`CE->getCalleeDecl()` returns `VarDecl` if the callee is actually a function pointer variable. Consequently, calling `getAsFunction()` will return null. To workaround the case, we should use the `CallEvent::parameters()`, which will internally recover the function being called and do the right thing. Fixes #74269 Depends on "[analyzer][NFC] Prefer CallEvent over CallExpr in APIs"
Diffstat (limited to 'clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp')
-rw-r--r--clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp3
1 files changed, 1 insertions, 2 deletions
diff --git a/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp
index f5dbf9d..b7b64c3 100644
--- a/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp
@@ -2487,8 +2487,7 @@ void CStringChecker::evalSprintfCommon(CheckerContext &C, const CallEvent &Call,
const auto *CE = cast<CallExpr>(Call.getOriginExpr());
DestinationArgExpr Dest = {{Call.getArgExpr(0), 0}};
- // FIXME: We should use `Call.parameters().size()` here.
- const auto NumParams = CE->getCalleeDecl()->getAsFunction()->getNumParams();
+ const auto NumParams = Call.parameters().size();
assert(CE->getNumArgs() >= NumParams);
const auto AllArguments =