diff --git a/Tests/LibRegex/RegexLibC.cpp b/Tests/LibRegex/RegexLibC.cpp index e922e4525e7..04794dbc08b 100644 --- a/Tests/LibRegex/RegexLibC.cpp +++ b/Tests/LibRegex/RegexLibC.cpp @@ -1149,4 +1149,10 @@ TEST_CASE(bre_basic) EXPECT_EQ(regcomp(®ex, "15{1,2}", REG_NOSUB | REG_ICASE), REG_NOERR); EXPECT_EQ(regexec(®ex, "15{1,2}", 0, NULL, 0), REG_NOERR); regfree(®ex); + + EXPECT_EQ(regcomp(®ex, "1[56]", REG_NOSUB | REG_ICASE), REG_NOERR); + EXPECT_EQ(regexec(®ex, "15", 0, NULL, 0), REG_NOERR); + EXPECT_EQ(regexec(®ex, "16", 0, NULL, 0), REG_NOERR); + EXPECT_EQ(regexec(®ex, "17", 0, NULL, 0), REG_NOMATCH); + regfree(®ex); } diff --git a/Userland/Libraries/LibRegex/RegexParser.cpp b/Userland/Libraries/LibRegex/RegexParser.cpp index d794721d947..814759de4e8 100644 --- a/Userland/Libraries/LibRegex/RegexParser.cpp +++ b/Userland/Libraries/LibRegex/RegexParser.cpp @@ -481,12 +481,20 @@ bool PosixBasicParser::parse_one_char_or_collation_element(ByteCode& bytecode, s Vector values; size_t bracket_minimum_length = 0; - if (!AbstractPosixParser::parse_bracket_expression(values, bracket_minimum_length)) - return false; - bytecode.insert_bytecode_compare_values(move(values)); - match_length_minimum += bracket_minimum_length; - return !has_error(); + if (match(TokenType::LeftBracket)) { + consume(); + if (!AbstractPosixParser::parse_bracket_expression(values, bracket_minimum_length)) + return false; + + consume(TokenType::RightBracket, Error::MismatchingBracket); + + bytecode.insert_bytecode_compare_values(move(values)); + match_length_minimum += bracket_minimum_length; + return !has_error(); + } + + return set_error(Error::InvalidPattern); } // =============================