1
Fork 0
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:
Timothy Flynn 2021-08-11 09:39:10 -04:00 committed by Linus Groh
parent 51b3fb5532
commit e887314472
2 changed files with 35 additions and 11 deletions

View file

@ -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 },