Bläddra i källkod

LibRegex: Fix assertion when parsing '(?'

Found by oss-fuzz: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=28186&q=label%3AProj-serenity
AnotherTest 4 år sedan
förälder
incheckning
c1c5225b72
2 ändrade filer med 4 tillägg och 0 borttagningar
  1. 3 0
      Libraries/LibRegex/RegexLexer.cpp
  2. 1 0
      Libraries/LibRegex/Tests/Regex.cpp

+ 3 - 0
Libraries/LibRegex/RegexLexer.cpp

@@ -64,6 +64,9 @@ ALWAYS_INLINE char Lexer::peek(size_t offset) const
 
 void Lexer::back(size_t offset)
 {
+    if (offset == m_position + 1)
+        offset = m_position; // 'position == 0' occurs twice.
+
     ASSERT(offset <= m_position);
     if (!offset)
         return;

+ 1 - 0
Libraries/LibRegex/Tests/Regex.cpp

@@ -496,6 +496,7 @@ TEST_CASE(ECMA262_parse)
         { ",/=-:" },                                       // #4243
         { "\\x" },                                         // Even invalid escapes are allowed if ~unicode.
         { "\\", regex::Error::InvalidTrailingEscape },
+        { "(?", regex::Error::InvalidCaptureGroup },
     };
 
     for (auto& test : tests) {