mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 05:58:11 +00:00
LibRegex: Fix ECMA-262 parsing of invalid identity escapes
* Only alphabetic (A-Z, a-z) characters may be escaped with \c. The loop currently parsing \c includes code points between the upper/lower case groups. * In Unicode mode, all invalid identity escapes should cause a parser error, even in browser-extended mode. * Avoid an infinite loop when parsing the pattern "\c" on its own.
This commit is contained in:
parent
51b3fb5532
commit
e887314472
2 changed files with 35 additions and 11 deletions
|
@ -525,6 +525,18 @@ TEST_CASE(ECMA262_parse)
|
|||
{ "\\\\p{1}", regex::Error::NoError, ECMAScriptFlags::Unicode },
|
||||
{ "\\\\p{AsCiI}", regex::Error::InvalidPattern, ECMAScriptFlags::Unicode },
|
||||
{ "\\\\p{ASCII}", regex::Error::InvalidPattern, ECMAScriptFlags::Unicode },
|
||||
{ "\\c", regex::Error::NoError, ECMAScriptFlags::BrowserExtended },
|
||||
{ "\\c", regex::Error::InvalidPattern, ECMAScriptFlags::Unicode },
|
||||
{ "[\\c]", regex::Error::NoError, ECMAScriptFlags::BrowserExtended },
|
||||
{ "[\\c]", regex::Error::InvalidPattern, ECMAScriptFlags::Unicode },
|
||||
{ "\\c`", regex::Error::NoError, ECMAScriptFlags::BrowserExtended },
|
||||
{ "\\c`", regex::Error::InvalidPattern, ECMAScriptFlags::Unicode },
|
||||
{ "[\\c`]", regex::Error::NoError, ECMAScriptFlags::BrowserExtended },
|
||||
{ "[\\c`]", regex::Error::InvalidPattern, ECMAScriptFlags::Unicode },
|
||||
{ "\\A", regex::Error::NoError, ECMAScriptFlags::BrowserExtended },
|
||||
{ "\\A", regex::Error::InvalidCharacterClass, ECMAScriptFlags::Unicode },
|
||||
{ "[\\A]", regex::Error::NoError, ECMAScriptFlags::BrowserExtended },
|
||||
{ "[\\A]", regex::Error::InvalidPattern, ECMAScriptFlags::Unicode },
|
||||
};
|
||||
|
||||
for (auto& test : tests) {
|
||||
|
@ -579,6 +591,7 @@ TEST_CASE(ECMA262_match)
|
|||
{ "\\05", "\5", true, ECMAScriptFlags::BrowserExtended },
|
||||
{ "\\455", "\45""5", true, ECMAScriptFlags::BrowserExtended },
|
||||
{ "\\314", "\314", true, ECMAScriptFlags::BrowserExtended },
|
||||
{ "\\c", "\\c", true, ECMAScriptFlags::BrowserExtended },
|
||||
{ "\\cf", "\06", true, ECMAScriptFlags::BrowserExtended },
|
||||
{ "\\c1", "\\c1", true, ECMAScriptFlags::BrowserExtended },
|
||||
{ "[\\c1]", "\x11", true, ECMAScriptFlags::BrowserExtended },
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue