From 267040dde769b0d1d5b516958ac58534dccbaf93 Mon Sep 17 00:00:00 2001 From: Ali Mohammad Pur Date: Sun, 31 Dec 2023 17:44:44 +0330 Subject: [PATCH] LibRegex: Error out on Eof when parsing nonempty class range elements Fixes #22507. --- Tests/LibRegex/Regex.cpp | 13 +++++++++++++ Userland/Libraries/LibRegex/RegexParser.cpp | 5 +++++ 2 files changed, 18 insertions(+) diff --git a/Tests/LibRegex/Regex.cpp b/Tests/LibRegex/Regex.cpp index 555def1b56..b8a0a3201e 100644 --- a/Tests/LibRegex/Regex.cpp +++ b/Tests/LibRegex/Regex.cpp @@ -1175,3 +1175,16 @@ TEST_CASE(inversion_state_in_char_class) EXPECT_EQ(result.capture_group_matches.first()[1].view.to_byte_string(), "}"sv); } } + +TEST_CASE(mismatching_brackets) +{ + auto const test_cases = Array { + "["sv, + "[ -"sv, + }; + + for (auto const& test_case : test_cases) { + Regex re(test_case); + EXPECT_EQ(re.parser_result.error, regex::Error::MismatchingBracket); + } +} diff --git a/Userland/Libraries/LibRegex/RegexParser.cpp b/Userland/Libraries/LibRegex/RegexParser.cpp index e10be2b0d5..ae97620623 100644 --- a/Userland/Libraries/LibRegex/RegexParser.cpp +++ b/Userland/Libraries/LibRegex/RegexParser.cpp @@ -1963,6 +1963,11 @@ bool ECMA262Parser::parse_nonempty_class_ranges(Vector& return {}; } + if (match(TokenType::Eof)) { + set_error(Error::MismatchingBracket); + return {}; + } + if (match(TokenType::RightBracket) || match(TokenType::HyphenMinus)) return {};