[clang] 7438a02 - [-Wunsafe-buffer-usage] Fix assert when constexpr size passed to snprintf() (#119786) (#124022)

via cfe-commits cfe-commits at lists.llvm.org
Mon Feb 10 10:34:54 PST 2025


Author: Thomas Sepez
Date: 2025-02-10T19:34:50+01:00
New Revision: 7438a024b66695fd9a22571da901533e6771a617

URL: https://github.com/llvm/llvm-project/commit/7438a024b66695fd9a22571da901533e6771a617
DIFF: https://github.com/llvm/llvm-project/commit/7438a024b66695fd9a22571da901533e6771a617.diff

LOG: [-Wunsafe-buffer-usage] Fix assert when constexpr size passed to snprintf() (#119786) (#124022)

EvaluateAsConstExpr() can return an lvalue which is not compatible
with a subsequent getInt() call. Instead, use EvaluateAsInt() which
will use all techniques availble to get an int result compatible
with the subsequent getInt() call.

Added: 
    

Modified: 
    clang/lib/Analysis/UnsafeBufferUsage.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/Analysis/UnsafeBufferUsage.cpp b/clang/lib/Analysis/UnsafeBufferUsage.cpp
index c064aa30e8aedc6..c51398698922bf8 100644
--- a/clang/lib/Analysis/UnsafeBufferUsage.cpp
+++ b/clang/lib/Analysis/UnsafeBufferUsage.cpp
@@ -930,7 +930,7 @@ AST_MATCHER(CallExpr, hasUnsafeSnprintfBuffer) {
       // The array element type must be compatible with `char` otherwise an
       // explicit cast will be needed, which will make this check unreachable.
       // Therefore, the array extent is same as its' bytewise size.
-      if (Size->EvaluateAsConstantExpr(ER, Ctx)) {
+      if (Size->EvaluateAsInt(ER, Ctx)) {
         APSInt EVal = ER.Val.getInt(); // Size must have integer type
 
         return APSInt::compareValues(EVal, APSInt(CAT->getSize(), true)) != 0;


        


More information about the cfe-commits mailing list