[webkit-changes] [WebKit/WebKit] 06b56b: [Yarr] ASSERTION FAILED: m_setOp == CharacterClass...
Michael Saboff
noreply at github.com
Wed May 17 09:40:00 PDT 2023
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 06b56b4c9d0015be87161819dd740b686827980e
https://github.com/WebKit/WebKit/commit/06b56b4c9d0015be87161819dd740b686827980e
Author: Michael Saboff <msaboff at apple.com>
Date: 2023-05-17 (Wed, 17 May 2023)
Changed paths:
M JSTests/stress/regexp-vflag-property-of-strings.js
M Source/JavaScriptCore/yarr/YarrParser.h
Log Message:
-----------
[Yarr] ASSERTION FAILED: m_setOp == CharacterClassSetOp::Default || m_setOp == setOp
https://bugs.webkit.org/show_bug.cgi?id=256822
rdar://108256053
Reviewed by Yusuke Suzuki.
Refactored ClassSetParserDelegate state transitions. Prior to this refactoring, ClassSetConstructionState::Empty
was used at both the start of a class set and after a class set operation with its left and right operands.
Given that this bug occurred with standalone class set operator, the prior use of ClassSetConstructionState::Empty
didn't allow for proper detection of the bug case. Changed the state after the right hand operand of a class set
operator to be ClassSetConstructionState::AfterSetOperand Most of the refactoring occurs in
ClassSetParserDelegate::atomPatternCharacter() and ClassSetParserDelegate::atomBuiltInCharacterClass().
This change necessitated some other changes. Added a new ClassSet parseEscape() mode to simplify processing of
\q{} class disjunction escapes. Since class set disjunctions may return strings, a parsed class set disjunction
returns a new TokenType, SetDisjunction, to distinguish it from the other parse escapes results that resolve to
either a single character, via atomPatternCharacter(), or a builtin character class, via atomBuiltInCharacterClass().
Updated regexp-vflag-property-of-strings.js with new test cases.
* JSTests/stress/regexp-vflag-property-of-strings.js:
* Source/JavaScriptCore/yarr/YarrParser.h:
(JSC::Yarr::Parser::ClassSetParserDelegate::nestedClassEnd):
(JSC::Yarr::Parser::ClassSetParserDelegate::setSubtractOp):
(JSC::Yarr::Parser::ClassSetParserDelegate::setIntersectionOp):
(JSC::Yarr::Parser::ClassSetParserDelegate::afterSetOperand):
(JSC::Yarr::Parser::ClassSetParserDelegate::atomPatternCharacter):
(JSC::Yarr::Parser::ClassSetParserDelegate::atomBuiltInCharacterClass):
(JSC::Yarr::Parser::parseEscape):
(JSC::Yarr::Parser::parseClassSetEscape):
(JSC::Yarr::Parser::parseClassSet):
(JSC::Yarr::Parser::parseClassStringDisjunction):
(JSC::Yarr::Parser::ClassSetParserDelegate::afterOperand): Deleted.
Canonical link: https://commits.webkit.org/264153@main
More information about the webkit-changes
mailing list