Changeset 229363 in webkit
- Timestamp:
- Mar 7, 2018 9:44:06 AM (6 years ago)
- Location:
- trunk
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r229361 r229363 1 2018-03-07 Yusuke Suzuki <utatane.tea@gmail.com> 2 3 HTML `pattern` attribute should set `u` flag for regular expressions 4 https://bugs.webkit.org/show_bug.cgi?id=151598 5 6 Reviewed by Chris Dumez. 7 8 * fast/forms/ValidityState-patternMismatch-expected.txt: 9 * fast/forms/ValidityState-patternMismatch.html: 10 1 11 2018-03-07 Frederic Wang <fwang@igalia.com> 2 12 -
trunk/LayoutTests/fast/forms/ValidityState-patternMismatch-expected.txt
r149151 r229363 29 29 PASS patternMismatchFor("match-19") is false 30 30 PASS patternMismatchFor("match-20") is false 31 PASS patternMismatchFor("match-21") is false 32 PASS patternMismatchFor("match-22") is false 31 33 PASS patternMismatchFor("wrong-gray-or-grey") is true 32 34 PASS patternMismatchFor("gray") is false … … 54 56 PASS patternMismatchFor("mismatch-20") is true 55 57 PASS patternMismatchFor("mismatch-21") is true 58 PASS patternMismatchFor("mismatch-22") is true 56 59 PASS patternMismatchFor("empty-pattern-match") is false 57 60 PASS patternMismatchFor("empty-pattern-mismatch") is true … … 62 65 PASS patternMismatchFor("invalid-05") is false 63 66 PASS patternMismatchFor("invalid-06") is false 67 PASS patternMismatchFor("invalid-07") is false 68 PASS patternMismatchFor("invalid-08") is false 64 69 PASS patternMismatchFor("disabled") is false 65 70 PASS successfullyParsed is true -
trunk/LayoutTests/fast/forms/ValidityState-patternMismatch.html
r155268 r229363 33 33 <input id="match-19" type="text" pattern="10|11|12|[0-9]" value="12" /> 34 34 <input id="match-20" type="text" pattern="f(o|e)\1" value="foo" /> 35 <input id="match-21" type="text" pattern="a.b" value="a𝌆b" /> 36 <input id="match-22" type="text" pattern="a..b" value="a𝌆b" /> 35 37 <input id="empty-pattern-match" type="text" pattern="" value="" /> 36 38 <input id="wrong-gray-or-grey" type="text" pattern="gr[ae]y" value="Wrong!" … … 58 60 /><input id="mismatch-19" type="text" pattern="^" value="wrong" 59 61 /><input id="mismatch-20" type="text" pattern="$" value="wrong" 60 /><input id="mismatch-21" type="text" pattern="f(o|e)\1" value="foe"/> 62 /><input id="mismatch-21" type="text" pattern="f(o|e)\1" value="foe" 63 /><input id="mismatch-22" type="text" pattern="a...b" value="a𝌆b" /> 61 64 62 65 <input id="invalid-01" type="text" pattern=")foo(" value="foo"/> … … 66 69 <input id="invalid-05" type="text" pattern="[0-9" value="1"/> 67 70 <input id="invalid-06" type="text" pattern="[0-9" value="a"/> 71 <input id="invalid-07" type="text" pattern="foo\'bar" value="foo'bar"/> 72 <input id="invalid-08" type="text" pattern="foo\'bar" value="foo"/> 68 73 69 74 <input id="empty-pattern-mismatch" type="text" pattern="" value="Lorem Ipsum" … … 102 107 shouldBeFalse('patternMismatchFor("match-19")'); 103 108 shouldBeFalse('patternMismatchFor("match-20")'); 109 shouldBeFalse('patternMismatchFor("match-21")'); 110 shouldBeFalse('patternMismatchFor("match-22")'); 104 111 105 112 shouldBeTrue('patternMismatchFor("wrong-gray-or-grey")'); … … 129 136 shouldBeTrue('patternMismatchFor("mismatch-20")'); 130 137 shouldBeTrue('patternMismatchFor("mismatch-21")'); 138 shouldBeTrue('patternMismatchFor("mismatch-22")'); 131 139 132 140 shouldBeFalse('patternMismatchFor("empty-pattern-match")'); … … 139 147 shouldBeFalse('patternMismatchFor("invalid-05")'); 140 148 shouldBeFalse('patternMismatchFor("invalid-06")'); 149 shouldBeFalse('patternMismatchFor("invalid-07")'); 150 shouldBeFalse('patternMismatchFor("invalid-08")'); 141 151 142 152 shouldBeFalse('patternMismatchFor("disabled")'); -
trunk/Source/JavaScriptCore/ChangeLog
r229362 r229363 1 2018-03-07 Yusuke Suzuki <utatane.tea@gmail.com> 2 3 HTML `pattern` attribute should set `u` flag for regular expressions 4 https://bugs.webkit.org/show_bug.cgi?id=151598 5 6 Reviewed by Chris Dumez. 7 8 Add UnicodeMode for JSC::Yarr::RegularExpression. 9 10 * yarr/RegularExpression.cpp: 11 (JSC::Yarr::RegularExpression::Private::create): 12 (JSC::Yarr::RegularExpression::Private::Private): 13 (JSC::Yarr::RegularExpression::Private::compile): 14 (JSC::Yarr::RegularExpression::RegularExpression): 15 * yarr/RegularExpression.h: 16 1 17 2018-03-07 Yusuke Suzuki <utatane.tea@gmail.com> 2 18 -
trunk/Source/JavaScriptCore/yarr/RegularExpression.cpp
r226128 r229363 38 38 class RegularExpression::Private : public RefCounted<RegularExpression::Private> { 39 39 public: 40 static Ref<Private> create(const String& pattern, TextCaseSensitivity caseSensitivity, MultilineMode multilineMode )40 static Ref<Private> create(const String& pattern, TextCaseSensitivity caseSensitivity, MultilineMode multilineMode, UnicodeMode unicodeMode) 41 41 { 42 return adoptRef(*new Private(pattern, caseSensitivity, multilineMode ));42 return adoptRef(*new Private(pattern, caseSensitivity, multilineMode, unicodeMode)); 43 43 } 44 44 … … 49 49 50 50 private: 51 Private(const String& pattern, TextCaseSensitivity caseSensitivity, MultilineMode multilineMode )52 : m_regExpByteCode(compile(pattern, caseSensitivity, multilineMode ))51 Private(const String& pattern, TextCaseSensitivity caseSensitivity, MultilineMode multilineMode, UnicodeMode unicodeMode) 52 : m_regExpByteCode(compile(pattern, caseSensitivity, multilineMode, unicodeMode)) 53 53 { 54 54 } 55 55 56 std::unique_ptr<JSC::Yarr::BytecodePattern> compile(const String& patternString, TextCaseSensitivity caseSensitivity, MultilineMode multilineMode )56 std::unique_ptr<JSC::Yarr::BytecodePattern> compile(const String& patternString, TextCaseSensitivity caseSensitivity, MultilineMode multilineMode, UnicodeMode unicodeMode) 57 57 { 58 58 RegExpFlags flags = NoFlags; … … 63 63 if (multilineMode == MultilineEnabled) 64 64 flags = static_cast<RegExpFlags>(flags | FlagMultiline); 65 66 if (unicodeMode == UnicodeAwareMode) 67 flags = static_cast<RegExpFlags>(flags | FlagUnicode); 65 68 66 69 JSC::Yarr::YarrPattern pattern(patternString, flags, m_constructionErrorCode); … … 79 82 }; 80 83 81 RegularExpression::RegularExpression(const String& pattern, TextCaseSensitivity caseSensitivity, MultilineMode multilineMode )82 : d(Private::create(pattern, caseSensitivity, multilineMode ))84 RegularExpression::RegularExpression(const String& pattern, TextCaseSensitivity caseSensitivity, MultilineMode multilineMode, UnicodeMode unicodeMode) 85 : d(Private::create(pattern, caseSensitivity, multilineMode, unicodeMode)) 83 86 { 84 87 } -
trunk/Source/JavaScriptCore/yarr/RegularExpression.h
r225117 r229363 32 32 enum MultilineMode { MultilineDisabled, MultilineEnabled }; 33 33 enum TextCaseSensitivity { TextCaseSensitive, TextCaseInsensitive }; 34 enum UnicodeMode { UnicodeUnawareMode, UnicodeAwareMode }; 34 35 35 36 class JS_EXPORT_PRIVATE RegularExpression { 36 37 WTF_MAKE_FAST_ALLOCATED; 37 38 public: 38 explicit RegularExpression(const String&, TextCaseSensitivity = TextCaseSensitive, MultilineMode = MultilineDisabled );39 explicit RegularExpression(const String&, TextCaseSensitivity = TextCaseSensitive, MultilineMode = MultilineDisabled, UnicodeMode = UnicodeUnawareMode); 39 40 ~RegularExpression(); 40 41 -
trunk/Source/WebCore/ChangeLog
r229361 r229363 1 2018-03-07 Yusuke Suzuki <utatane.tea@gmail.com> 2 3 HTML `pattern` attribute should set `u` flag for regular expressions 4 https://bugs.webkit.org/show_bug.cgi?id=151598 5 6 Reviewed by Chris Dumez. 7 8 This patch attaches "u" flag to the RegExp compiled for HTML "pattern" attribute[1]. 9 10 [1]: https://html.spec.whatwg.org/multipage/forms.html#the-pattern-attribute 11 12 * html/BaseTextInputType.cpp: 13 (WebCore::BaseTextInputType::patternMismatch const): 14 1 15 2018-03-07 Frederic Wang <fwang@igalia.com> 2 16 -
trunk/Source/WebCore/html/BaseTextInputType.cpp
r228218 r229363 40 40 bool BaseTextInputType::patternMismatch(const String& value) const 41 41 { 42 // FIXME: We should execute RegExp parser first to check validity instead of creating an actual RegularExpression. 43 // https://bugs.webkit.org/show_bug.cgi?id=183361 42 44 const AtomicString& rawPattern = element().attributeWithoutSynchronization(patternAttr); 43 if (rawPattern.isNull() || value.isEmpty() || !JSC::Yarr::RegularExpression(rawPattern ).isValid())45 if (rawPattern.isNull() || value.isEmpty() || !JSC::Yarr::RegularExpression(rawPattern, JSC::Yarr::TextCaseSensitive, JSC::Yarr::MultilineDisabled, JSC::Yarr::UnicodeAwareMode).isValid()) 44 46 return false; 45 47 String pattern = "^(?:" + rawPattern + ")$"; 46 48 int matchLength = 0; 47 49 int valueLength = value.length(); 48 int matchOffset = JSC::Yarr::RegularExpression(pattern ).match(value, 0, &matchLength);50 int matchOffset = JSC::Yarr::RegularExpression(pattern, JSC::Yarr::TextCaseSensitive, JSC::Yarr::MultilineDisabled, JSC::Yarr::UnicodeAwareMode).match(value, 0, &matchLength); 49 51 return matchOffset || matchLength != valueLength; 50 52 }
Note: See TracChangeset
for help on using the changeset viewer.