Просмотр исходного кода

LibRegex: Error out on Eof when parsing nonempty class range elements

Fixes #22507.
Ali Mohammad Pur 1 год назад
Родитель
Сommit
267040dde7
2 измененных файлов с 18 добавлено и 0 удалено
  1. 13 0
      Tests/LibRegex/Regex.cpp
  2. 5 0
      Userland/Libraries/LibRegex/RegexParser.cpp

+ 13 - 0
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<ECMA262> re(test_case);
+        EXPECT_EQ(re.parser_result.error, regex::Error::MismatchingBracket);
+    }
+}

+ 5 - 0
Userland/Libraries/LibRegex/RegexParser.cpp

@@ -1963,6 +1963,11 @@ bool ECMA262Parser::parse_nonempty_class_ranges(Vector<CompareTypeAndValuePair>&
             return {};
         }
 
+        if (match(TokenType::Eof)) {
+            set_error(Error::MismatchingBracket);
+            return {};
+        }
+
         if (match(TokenType::RightBracket) || match(TokenType::HyphenMinus))
             return {};