From 627bbee05580163b869d45fa67df0a4529eb3ca5 Mon Sep 17 00:00:00 2001 From: Ali Mohammad Pur Date: Sat, 19 Feb 2022 17:18:23 +0330 Subject: [PATCH] LibRegex: Allow quantifiers after quantifiable assertions While quantifying assertions is very much meaningless, the specification allows them with annex B's extended grammar for browsers, so read and apply the quantifiers. Fixes #12373. --- Tests/LibRegex/Regex.cpp | 1 + Userland/Libraries/LibRegex/RegexParser.cpp | 3 +++ 2 files changed, 4 insertions(+) diff --git a/Tests/LibRegex/Regex.cpp b/Tests/LibRegex/Regex.cpp index 6b8f5f559c..2b11be4d37 100644 --- a/Tests/LibRegex/Regex.cpp +++ b/Tests/LibRegex/Regex.cpp @@ -599,6 +599,7 @@ TEST_CASE(ECMA262_parse) { "(?<$$_$$>a)"sv }, { "(?<ΓΏ>a)"sv }, { "(?<𝓑𝓻𝓸𝔀𝓷>a)"sv }, + { "((?=lg)?[vl]k\\-?\\d{3}) bui| 3\\.[-\\w; ]{10}lg?-([06cv9]{3,4})"sv, regex::Error::NoError, ECMAScriptFlags::BrowserExtended } // #12373, quantifiable assertions. }; for (auto& test : tests) { diff --git a/Userland/Libraries/LibRegex/RegexParser.cpp b/Userland/Libraries/LibRegex/RegexParser.cpp index 564f57e612..60d960a655 100644 --- a/Userland/Libraries/LibRegex/RegexParser.cpp +++ b/Userland/Libraries/LibRegex/RegexParser.cpp @@ -1083,6 +1083,9 @@ bool ECMA262Parser::parse_assertion(ByteCode& stack, [[maybe_unused]] size_t& ma if (m_should_use_browser_extended_grammar) { if (!unicode) { if (parse_quantifiable_assertion(assertion_stack, match_length_minimum, named)) { + if (!parse_quantifier(assertion_stack, match_length_minimum, unicode, named)) + return false; + stack.extend(move(assertion_stack)); return true; }