From 4db6fa83605de5f9a994ca1c1d8e28fc762624a5 Mon Sep 17 00:00:00 2001 From: Moonchild Date: Wed, 21 Dec 2022 18:53:25 +0100 Subject: [PATCH] Issue #1279 - Implement regular expressions lookbehind (v3) Based on d10e8a5b with the addition of chromium issue 570241. --- js/src/irregexp/RegExpEngine.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/js/src/irregexp/RegExpEngine.cpp b/js/src/irregexp/RegExpEngine.cpp index 4ed61fd364..42787dc0f0 100644 --- a/js/src/irregexp/RegExpEngine.cpp +++ b/js/src/irregexp/RegExpEngine.cpp @@ -4860,6 +4860,9 @@ TextNode::GetQuickCheckDetails(QuickCheckDetails* details, int characters_filled_in, bool not_at_start) { + // Do not collect any quick check details if the text node reads backward, + // since it reads in the opposite direction than we use for quick checks. + if (read_backward()) return; MOZ_ASSERT(characters_filled_in < details->characters()); int characters = details->characters(); int char_mask = MaximumCharacter(compiler->ascii()); @@ -5016,7 +5019,7 @@ QuickCheckDetails::Clear() void QuickCheckDetails::Advance(int by, bool ascii) { - if (by >= characters_) { + if (by >= characters_ || by < 0) { Clear(); return; }