From 660d2b53b1206e868d5470eee80b5e62d7e30da7 Mon Sep 17 00:00:00 2001 From: Ali Mohammad Pur Date: Tue, 6 Sep 2022 23:55:09 +0430 Subject: [PATCH] LibRegex: Account for eof after \ when 'x' leads to legacy behaviour --- Tests/LibRegex/Regex.cpp | 1 + Userland/Libraries/LibRegex/RegexParser.cpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Tests/LibRegex/Regex.cpp b/Tests/LibRegex/Regex.cpp index 2b4da92c983..abcfa935134 100644 --- a/Tests/LibRegex/Regex.cpp +++ b/Tests/LibRegex/Regex.cpp @@ -603,6 +603,7 @@ TEST_CASE(ECMA262_parse) { "(?<𝓑𝓻𝓸𝔀𝓷>a)"sv }, { "((?=lg)?[vl]k\\-?\\d{3}) bui| 3\\.[-\\w; ]{10}lg?-([06cv9]{3,4})"sv, regex::Error::NoError, ECMAScriptFlags::BrowserExtended }, // #12373, quantifiable assertions. { parse_test_case_long_disjunction_chain.view() }, // A whole lot of disjunctions, should not overflow the stack. + { "(\"|')(?:(?!\\2)[^\\\\\\r\\n]|\\\\.)*\\2"sv, regex::Error::NoError, ECMAScriptFlags::BrowserExtended }, // LegacyOctalEscapeSequence should not consume too many chars (and should not crash) }; for (auto& test : tests) { diff --git a/Userland/Libraries/LibRegex/RegexParser.cpp b/Userland/Libraries/LibRegex/RegexParser.cpp index 557632c6507..b37a85651ee 100644 --- a/Userland/Libraries/LibRegex/RegexParser.cpp +++ b/Userland/Libraries/LibRegex/RegexParser.cpp @@ -1582,7 +1582,7 @@ bool ECMA262Parser::parse_atom_escape(ByteCode& stack, size_t& match_length_mini } // If not, put the characters back. - back(escape_str.length()); + back(escape_str.length() + (done() ? 0 : 1)); } Vector escape_compares;