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 {};