Browse Source

LibRegex: Disallow unescaped quantifiers in Unicode mode

Timothy Flynn 3 years ago
parent
commit
1a173be29d
2 changed files with 9 additions and 0 deletions
  1. 6 0
      Tests/LibRegex/Regex.cpp
  2. 3 0
      Userland/Libraries/LibRegex/RegexParser.cpp

+ 6 - 0
Tests/LibRegex/Regex.cpp

@@ -559,6 +559,12 @@ TEST_CASE(ECMA262_parse)
         { "[\\00]"sv, regex::Error::InvalidPattern, combine_flags(ECMAScriptFlags::Unicode, ECMAScriptFlags::BrowserExtended) },
         { "\\^\\$\\\\\\.\\*\\+\\?\\(\\)\\[\\]\\{\\}\\|\\/"sv, regex::Error::NoError, ECMAScriptFlags::Unicode },
         { "[\\^\\$\\\\\\.\\*\\+\\?\\(\\)\\[\\]\\{\\}\\|\\/]"sv, regex::Error::NoError, ECMAScriptFlags::Unicode },
+        { "]"sv, regex::Error::NoError, ECMAScriptFlags::BrowserExtended },
+        { "]"sv, regex::Error::InvalidPattern, ECMAScriptFlags::Unicode },
+        { "\\]"sv, regex::Error::NoError, ECMAScriptFlags::Unicode },
+        { "}"sv, regex::Error::NoError, ECMAScriptFlags::BrowserExtended },
+        { "}"sv, regex::Error::InvalidPattern, ECMAScriptFlags::Unicode },
+        { "\\}"sv, regex::Error::NoError, ECMAScriptFlags::Unicode },
     };
 
     for (auto& test : tests) {

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

@@ -1290,6 +1290,9 @@ bool ECMA262Parser::parse_atom(ByteCode& stack, size_t& match_length_minimum, bo
     }
 
     if (match(TokenType::RightBracket) || match(TokenType::RightCurly) || match(TokenType::LeftCurly)) {
+        if (unicode)
+            return set_error(Error::InvalidPattern);
+
         if (m_should_use_browser_extended_grammar) {
             auto token = consume();
             match_length_minimum += 1;