Ver Fonte

LibRegex: Match the escaped part of escaped syntax characters

Previously, `\^` would've matched `\`, not `^`.
AnotherTest há 4 anos atrás
pai
commit
91bf3dc7fe

+ 1 - 1
Userland/Libraries/LibRegex/RegexParser.cpp

@@ -1015,7 +1015,7 @@ bool ECMA262Parser::parse_atom(ByteCode& stack, size_t& match_length_minimum, bo
         // Also part of AtomEscape.
         auto token = consume();
         match_length_minimum += 1;
-        stack.insert_bytecode_compare_values({ { CharacterCompareType::Char, (ByteCodeValueType)token.value()[0] } });
+        stack.insert_bytecode_compare_values({ { CharacterCompareType::Char, (ByteCodeValueType)token.value()[1] } });
         return true;
     }
     if (try_skip("\\")) {

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

@@ -549,6 +549,7 @@ TEST_CASE(ECMA262_match)
         { "bar.*(?<!foo)", "barbar", true },
         { "((...)X)+", "fooXbarXbazX", true },
         { "(?:)", "", true },
+        { "\\^", "^" },
         // ECMA262, B.1.4. Regular Expression Pattern extensions for browsers
         { "{", "{", true, ECMAScriptFlags::BrowserExtended },
         { "\\5", "\5", true, ECMAScriptFlags::BrowserExtended },