From 9ab201fccad9344c7892285dc355339eb01f8a7f Mon Sep 17 00:00:00 2001 From: jmestwa-coder Date: Tue, 24 Mar 2026 01:02:50 +0530 Subject: [PATCH] dfa: make slow-bail progress tracking direction-aware in reverse scans --- re2/dfa.cc | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/re2/dfa.cc b/re2/dfa.cc index d587a552..4fb09a66 100644 --- a/re2/dfa.cc +++ b/re2/dfa.cc @@ -1436,11 +1436,16 @@ inline bool DFA::InlinedSearchLoop(SearchParams* params) { // of 10 bytes per state computation, fail so that RE2 can // fall back to the NFA. However, RE2::Set cannot fall back, // so we just have to keep on keeping on in that case. - if (dfa_should_bail_when_slow && resetp != NULL && - static_cast(p - resetp) < 10*state_cache_.size() && - kind_ != Prog::kManyMatch) { - params->failed = true; - return false; + if (dfa_should_bail_when_slow && resetp != NULL) { + ptrdiff_t bytes_since_reset_signed = + run_forward ? p - resetp : resetp - p; + size_t bytes_since_reset = + static_cast(bytes_since_reset_signed); + if (bytes_since_reset < 10*state_cache_.size() && + kind_ != Prog::kManyMatch) { + params->failed = true; + return false; + } } resetp = p;