[clang] [analyzer] Avoid unnecessary super region invalidation in `CStringChecker` (PR #146212)

DonĂ¡t Nagy via cfe-commits cfe-commits at lists.llvm.org
Thu Jul 3 06:47:13 PDT 2025


================
@@ -2223,16 +2223,59 @@ void CStringChecker::evalStrcpyCommon(CheckerContext &C, const CallEvent &Call,
         Result = lastElement;
     }
 
+    // For bounded method, amountCopied take the minimum of two values,
+    // for ConcatFnKind::strlcat:
+    // amountCopied = min (size - dstLen - 1 , srcLen)
+    // for others:
+    // amountCopied = min (srcLen, size)
+    // So even if we don't know about amountCopied, as long as one of them will
+    // not cause an out-of-bound access, the whole function's operation will not
+    // too, that will avoid invalidating the superRegion of data member in that
+    // situation.
+    bool CouldAccessOutOfBound = true;
+    if (IsBounded && amountCopied.isUnknown()) {
+      auto CouldAccessOutOfBoundForSVal = [&](NonLoc Val) -> bool {
----------------
NagyDonat wrote:

Currently both calls to this lambda are wrapped in `if (...NL)` blocks, so you could slightly simplify the code by bringing that repeated  check "into" the lambda. 

https://github.com/llvm/llvm-project/pull/146212


More information about the cfe-commits mailing list