mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-01-08 20:32:56 +03:00
LibRegex: Ensure escaped hexadecimals are exactly 2 digits in length
This commit is contained in:
parent
2e4b6fd1ac
commit
0c8f2f5aca
Notes:
sideshowbarker
2024-07-18 05:40:49 +09:00
Author: https://github.com/trflynn89 Commit: https://github.com/SerenityOS/serenity/commit/0c8f2f5aca3 Pull-request: https://github.com/SerenityOS/serenity/pull/9367 Reviewed-by: https://github.com/linusg ✅
@ -499,6 +499,10 @@ TEST_CASE(ECMA262_parse)
|
||||
{ "\\/" }, // #4189
|
||||
{ ",/=-:" }, // #4243
|
||||
{ "\\x" }, // Even invalid escapes are allowed if ~unicode.
|
||||
{ "\\x1" }, // Even invalid escapes are allowed if ~unicode.
|
||||
{ "\\x1", regex::Error::InvalidPattern, regex::ECMAScriptFlags::Unicode },
|
||||
{ "\\x11" },
|
||||
{ "\\x11", regex::Error::NoError, regex::ECMAScriptFlags::Unicode },
|
||||
{ "\\", regex::Error::InvalidTrailingEscape },
|
||||
{ "(?", regex::Error::InvalidCaptureGroup },
|
||||
{ "\\u1234", regex::Error::NoError, regex::ECMAScriptFlags::Unicode },
|
||||
|
@ -1450,7 +1450,7 @@ bool ECMA262Parser::parse_atom_escape(ByteCode& stack, size_t& match_length_mini
|
||||
|
||||
// HexEscape
|
||||
if (try_skip("x")) {
|
||||
if (auto hex_escape = read_digits(ReadDigitsInitialZeroState::Allow, true, 2); hex_escape.has_value()) {
|
||||
if (auto hex_escape = read_digits(ReadDigitsInitialZeroState::Allow, true, 2, 2); hex_escape.has_value()) {
|
||||
match_length_minimum += 1;
|
||||
stack.insert_bytecode_compare_values({ { CharacterCompareType::Char, (ByteCodeValueType)hex_escape.value() } });
|
||||
return true;
|
||||
@ -1802,7 +1802,7 @@ bool ECMA262Parser::parse_nonempty_class_ranges(Vector<CompareTypeAndValuePair>&
|
||||
|
||||
// HexEscape
|
||||
if (try_skip("x")) {
|
||||
if (auto hex_escape = read_digits(ReadDigitsInitialZeroState::Allow, true, 2); hex_escape.has_value()) {
|
||||
if (auto hex_escape = read_digits(ReadDigitsInitialZeroState::Allow, true, 2, 2); hex_escape.has_value()) {
|
||||
return { CharClassRangeElement { .code_point = hex_escape.value(), .is_character_class = false } };
|
||||
} else if (!unicode) {
|
||||
// '\x' is allowed in non-unicode mode, just matches 'x'.
|
||||
|
Loading…
Reference in New Issue
Block a user