LibRegex: Allow '-' as the last element of a charclass

Fixes #4189.
This commit is contained in:
AnotherTest 2020-11-28 12:28:36 +03:30 committed by Andreas Kling
parent e2fa1b40c4
commit 491e4a8a3b
Notes: sideshowbarker 2024-07-19 01:13:39 +09:00
2 changed files with 12 additions and 0 deletions

View file

@ -1315,6 +1315,12 @@ bool ECMA262Parser::parse_nonempty_class_ranges(Vector<CompareTypeAndValuePair>&
if (match(TokenType::HyphenMinus)) {
consume();
if (match(TokenType::RightBracket)) {
// Allow '-' as the last element in a charclass, even after an atom.
m_parser_state.lexer.back(2); // -]
m_parser_state.current_token = m_parser_state.lexer.next();
goto read_as_single_atom;
}
auto second_atom = read_class_atom();
if (!second_atom.has_value())
return false;
@ -1336,6 +1342,8 @@ bool ECMA262Parser::parse_nonempty_class_ranges(Vector<CompareTypeAndValuePair>&
continue;
}
read_as_single_atom:;
auto atom = first_atom.value();
if (atom.is_character_class) {

View file

@ -485,6 +485,10 @@ TEST_CASE(ECMA262_parse)
"^hel(?<LO>l\\w).$",
"^[-a-zA-Z\\w\\s]+$",
"\\bhello\\B",
"^[\\w+/_-]+[=]{0,2}$", // #4189
"^(?:[^<]*(<[\\w\\W]+>)[^>]*$|#([\\w\\-]*)$)", // #4189
"\\/", // #4189
"\\x", // Even invalid escapes are allowed if ~unicode.
};
for (auto& pattern : patterns) {