[clang] d78b5ce - [clang][HeuristicResolver] Additional hardening against an infinite loop in simplifyType() (#126690)

Kadir Cetinkaya via cfe-commits cfe-commits at lists.llvm.org
Tue Feb 11 00:38:48 PST 2025


Author: Nathan Ridge
Date: 2025-02-11T09:17:41+01:00
New Revision: d78b5ceb1661c5953563bf860f93b65f85fc4be0

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

LOG: [clang][HeuristicResolver] Additional hardening against an infinite loop in simplifyType() (#126690)

Added: 
    

Modified: 
    clang/lib/Sema/HeuristicResolver.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/Sema/HeuristicResolver.cpp b/clang/lib/Sema/HeuristicResolver.cpp
index 36e5b44b8b12cc..c9806a77d5ef6d 100644
--- a/clang/lib/Sema/HeuristicResolver.cpp
+++ b/clang/lib/Sema/HeuristicResolver.cpp
@@ -247,7 +247,11 @@ QualType HeuristicResolverImpl::simplifyType(QualType Type, const Expr *E,
     }
     return T;
   };
-  while (!Type.isNull()) {
+  // As an additional protection against infinite loops, bound the number of
+  // simplification steps.
+  size_t StepCount = 0;
+  const size_t MaxSteps = 64;
+  while (!Type.isNull() && StepCount++ < MaxSteps) {
     QualType New = SimplifyOneStep(Type);
     if (New == Type)
       break;


        


More information about the cfe-commits mailing list