From ee1d9217aa8dd25442ea4593836c998dfd7f49fb Mon Sep 17 00:00:00 2001 From: AnotherTest Date: Mon, 28 Dec 2020 09:07:17 +0330 Subject: [PATCH] LibRegex: Fail early if eof seen after '(?' Fixes #4583. --- Libraries/LibRegex/RegexParser.cpp | 5 +++++ Libraries/LibRegex/Tests/Regex.cpp | 1 + 2 files changed, 6 insertions(+) diff --git a/Libraries/LibRegex/RegexParser.cpp b/Libraries/LibRegex/RegexParser.cpp index 6015212123d..2afbad64c7f 100644 --- a/Libraries/LibRegex/RegexParser.cpp +++ b/Libraries/LibRegex/RegexParser.cpp @@ -741,6 +741,11 @@ bool ECMA262Parser::parse_assertion(ByteCode& stack, [[maybe_unused]] size_t& ma if (!try_skip("(?")) return false; + if (done()) { + set_error(Error::InvalidCaptureGroup); + return false; + } + ByteCode assertion_stack; size_t length_dummy = 0; diff --git a/Libraries/LibRegex/Tests/Regex.cpp b/Libraries/LibRegex/Tests/Regex.cpp index e4fb05c3c4e..0bb2e8d2ef7 100644 --- a/Libraries/LibRegex/Tests/Regex.cpp +++ b/Libraries/LibRegex/Tests/Regex.cpp @@ -500,6 +500,7 @@ TEST_CASE(ECMA262_parse) { "(?", regex::Error::InvalidCaptureGroup }, { "\\u1234", regex::Error::NoError, regex::ECMAScriptFlags::Unicode }, { "[\\u1234]", regex::Error::NoError, regex::ECMAScriptFlags::Unicode }, + { ",(?", regex::Error::InvalidCaptureGroup }, // #4583 }; for (auto& test : tests) {