From a7867fcd94555fb056bcaac66de45d4635da99bf Mon Sep 17 00:00:00 2001 From: Jon Roelofs Date: Wed, 23 Jul 2025 08:40:11 -0700 Subject: [FileCheck] Limit quadratic partial-match search behavior (#147833) --- llvm/lib/FileCheck/FileCheck.cpp | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'llvm/lib/FileCheck/FileCheck.cpp') diff --git a/llvm/lib/FileCheck/FileCheck.cpp b/llvm/lib/FileCheck/FileCheck.cpp index b79f6ec..ce35a5b 100644 --- a/llvm/lib/FileCheck/FileCheck.cpp +++ b/llvm/lib/FileCheck/FileCheck.cpp @@ -1360,6 +1360,12 @@ void Pattern::printFuzzyMatch(const SourceMgr &SM, StringRef Buffer, size_t Best = StringRef::npos; double BestQuality = 0; + // Arbitrarily limit quadratic search behavior stemming from long CHECK lines. + if (size_t(4096) * size_t(2048) < + std::min(size_t(4096), Buffer.size()) * + std::max(FixedStr.size(), RegExStr.size())) + return; + // Use an arbitrary 4k limit on how far we will search. for (size_t i = 0, e = std::min(size_t(4096), Buffer.size()); i != e; ++i) { if (Buffer[i] == '\n') -- cgit v1.1