Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: c07d637bf0207a1427d0f0b5d0d297e90fa90825
https://github.com/WebKit/WebKit/commit/c07d637bf0207a1427d0f0b5d0d297e90fa90825
Author: Daniel Liu <[email protected]>
Date: 2025-05-22 (Thu, 22 May 2025)
Changed paths:
M JSTests/stress/regexp-vflag-property-of-strings.js
M Source/JavaScriptCore/yarr/YarrParser.h
M Source/JavaScriptCore/yarr/YarrPattern.cpp
M Source/JavaScriptCore/yarr/YarrSyntaxChecker.cpp
M Source/WebCore/contentextensions/URLFilterParser.cpp
Log Message:
-----------
RegExp with the v flag should correctly handle nested inverted character
classes
https://bugs.webkit.org/show_bug.cgi?id=292429
rdar://151000852
Reviewed by Michael Saboff.
Currently, we do not handle nested character classes correctly if
they are inverted. While the parser is able to work out the inner
character class needs to be inverted, this information isn't sent
to the pattern generator, meaning that it treats any nested class
as a non-inverted class. This leads to spec non-conformance. This
patch fixes that issue by adding functions to handle inversion of
a character class's matches and ranges, for ASCII and Unicode. In
the case of an inverted nested group, we invert its contents when
the closing `]` is reached.
This change also requires a small change to the parser, since its
state holds a cached character to check for potential ranges. The
cached character previously was not cleared when we read a nested
character class, meaning that its character would be processed as
part of the nested class. This would lead to bugs where character
classes would seem to ignore parts of their contents, due to that
character being cached and being treated as a part of the nested,
inverted character class.
* JSTests/stress/regexp-vflag-property-of-strings.js:
(objectToString):
(testRegExp):
(testRegExpSyntaxError):
(printErrors):
* Source/JavaScriptCore/yarr/YarrParser.h:
(JSC::Yarr::requires):
(JSC::Yarr::Parser::ClassSetParserDelegate::nestedClassBegin):
(JSC::Yarr::Parser::ClassSetParserDelegate::nestedClassEnd):
(JSC::Yarr::Parser::parseClassSet):
* Source/JavaScriptCore/yarr/YarrPattern.cpp:
(JSC::Yarr::CharacterClassConstructor::invertMatches):
(JSC::Yarr::CharacterClassConstructor::asciiInvert):
(JSC::Yarr::CharacterClassConstructor::unicodeInvert):
(JSC::Yarr::YarrPatternConstructor::atomCharacterClassPushNested):
(JSC::Yarr::YarrPatternConstructor::atomCharacterClassPopNested):
* Source/JavaScriptCore/yarr/YarrSyntaxChecker.cpp:
(JSC::Yarr::SyntaxChecker::atomCharacterClassPushNested):
(JSC::Yarr::SyntaxChecker::atomCharacterClassPopNested):
* Source/WebCore/contentextensions/URLFilterParser.cpp:
(WebCore::ContentExtensions::PatternParser::atomCharacterClassPushNested):
(WebCore::ContentExtensions::PatternParser::atomCharacterClassPopNested):
Canonical link: https://commits.webkit.org/295277@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes