Title: [210361] trunk
Revision
210361
Author
cdu...@apple.com
Date
2017-01-05 10:31:27 -0800 (Thu, 05 Jan 2017)

Log Message

Form validation: Align email validation with the latest HTML specification
https://bugs.webkit.org/show_bug.cgi?id=166697
<rdar://problem/29870245>

Reviewed by Alex Christensen.

Source/WebCore:

Align email validation with the latest HTML specification:
- https://html.spec.whatwg.org/#valid-e-mail-address

It particular, the following changes were made:
- The first and last character of the domain now needs to be a letter or a digit
- Parts of the domain can only be 63 characters in length

No new tests, extended existing test.

* html/EmailInputType.cpp:

LayoutTests:

Extended / updated existing layout test to cover behavior changes.

* fast/forms/ValidityState-typeMismatch-email-expected.txt:
* fast/forms/resources/ValidityState-typeMismatch-email.js:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (210360 => 210361)


--- trunk/LayoutTests/ChangeLog	2017-01-05 18:29:00 UTC (rev 210360)
+++ trunk/LayoutTests/ChangeLog	2017-01-05 18:31:27 UTC (rev 210361)
@@ -1,3 +1,16 @@
+2017-01-05  Chris Dumez  <cdu...@apple.com>
+
+        Form validation: Align email validation with the latest HTML specification
+        https://bugs.webkit.org/show_bug.cgi?id=166697
+        <rdar://problem/29870245>
+
+        Reviewed by Alex Christensen.
+
+        Extended / updated existing layout test to cover behavior changes.
+
+        * fast/forms/ValidityState-typeMismatch-email-expected.txt:
+        * fast/forms/resources/ValidityState-typeMismatch-email.js:
+
 2017-01-05  Andreas Kling  <akl...@apple.com>
 
         REGRESSION(r210226): overflow:scroll scroll position not restored on back navigation

Modified: trunk/LayoutTests/fast/forms/ValidityState-typeMismatch-email-expected.txt (210360 => 210361)


--- trunk/LayoutTests/fast/forms/ValidityState-typeMismatch-email-expected.txt	2017-01-05 18:29:00 UTC (rev 210360)
+++ trunk/LayoutTests/fast/forms/ValidityState-typeMismatch-email-expected.txt	2017-01-05 18:31:27 UTC (rev 210361)
@@ -10,7 +10,6 @@
 PASS "a@b.b" is a valid email address. 
 PASS "a/b...@domain.com" is a valid email address. 
 PASS "{}@domain.com" is a valid email address. 
-PASS "ddjk-s...@asl-.com" is a valid email address. 
 PASS "m*'!%@something.sa" is a valid email address. 
 PASS "tu!!7n7.ad##0!!!@company.ca" is a valid email address. 
 PASS "%@com.com" is a valid email address. 
@@ -18,8 +17,6 @@
 PASS ".wo...@example.com" is a valid email address. 
 PASS "wo.....@example.com" is a valid email address. 
 PASS "some...@do-ma-in.com" is a valid email address. 
-PASS "some...@do-.com" is a valid email address. 
-PASS "someb...@-.com" is a valid email address. 
 PASS "somebody@example" is a valid email address. 
 PASS "
 a...@p.com
@@ -39,6 +36,8 @@
 PASS " a...@p.com " is a valid email address. It was sanitized to "a...@p.com".
 PASS "	a...@p.com	" is a valid email address. It was sanitized to "a...@p.com".
 PASS "a...@p.com" is a valid email address. It was sanitized to "a...@p.com".
+PASS "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...@p.com" is a valid email address. 
+PASS "a@ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp.ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" is a valid email address. 
 Invalid single addresses when 'multiple' attribute is not set.
 PASS "invalid:em...@example.com" is a invalid email address. 
 PASS "@somewhere.com" is a invalid email address. 
@@ -63,6 +62,11 @@
 PASS "a@p.com" is a invalid email address. 
 PASS "a @p.com" is a invalid email address. 
 PASS "a @p.com" is a invalid email address. 
+PASS "ddjk-s...@asl-.com" is a invalid email address. 
+PASS "some...@do-.com" is a invalid email address. 
+PASS "someb...@-.com" is a invalid email address. 
+PASS "a...@pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp.com" is a invalid email address. 
+PASS "a@p.cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" is a invalid email address. 
 Valid single addresses when 'multiple' attribute is set.
 PASS "someth...@something.com" is a valid email address list. 
 PASS "someone@localhost.localdomain" is a valid email address list. 
@@ -70,7 +74,6 @@
 PASS "a@b.b" is a valid email address list. 
 PASS "a/b...@domain.com" is a valid email address list. 
 PASS "{}@domain.com" is a valid email address list. 
-PASS "ddjk-s...@asl-.com" is a valid email address list. 
 PASS "m*'!%@something.sa" is a valid email address list. 
 PASS "tu!!7n7.ad##0!!!@company.ca" is a valid email address list. 
 PASS "%@com.com" is a valid email address list. 
@@ -78,8 +81,6 @@
 PASS ".wo...@example.com" is a valid email address list. 
 PASS "wo.....@example.com" is a valid email address list. 
 PASS "some...@do-ma-in.com" is a valid email address list. 
-PASS "some...@do-.com" is a valid email address list. 
-PASS "someb...@-.com" is a valid email address list. 
 PASS "somebody@example" is a valid email address list. 
 PASS " a...@p.com " is a valid email address list. It was sanitized to "a...@p.com".
 PASS "	a...@p.com	" is a valid email address list. It was sanitized to "a...@p.com".
@@ -99,6 +100,8 @@
 PASS " a...@p.com" is a valid email address list. It was sanitized to "a...@p.com".
 PASS "a...@p.com " is a valid email address list. It was sanitized to "a...@p.com".
 PASS " a...@p.com " is a valid email address list. It was sanitized to "a...@p.com".
+PASS "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...@p.com" is a valid email address list. 
+PASS "a@ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp.ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" is a valid email address list. 
 Invalid single addresses when 'multiple' attribute is set.
 PASS "invalid:em...@example.com" is a invalid email address list. 
 PASS "@somewhere.com" is a invalid email address list. 
@@ -126,6 +129,11 @@
 PASS "a@p.com" is a invalid email address list. 
 PASS "a @p.com" is a invalid email address list. 
 PASS "a @p.com" is a invalid email address list. 
+PASS "ddjk-s...@asl-.com" is a invalid email address list. 
+PASS "some...@do-.com" is a invalid email address list. 
+PASS "someb...@-.com" is a invalid email address list. 
+PASS "a...@pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp.com" is a invalid email address list. 
+PASS "a@p.cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" is a invalid email address list. 
 Valid multiple addresses when 'multiple' attribute is set.
 PASS "some...@somewhere.com,j...@doe.com,a@b.c,a/b@c.c,ualla@ualla.127" is a valid email address list. 
 PASS "tu!!7n7.ad##0!!!@company.ca,F/s/f/a...@feo-re.com,m*'@a.b" is a valid email address list. 

Modified: trunk/LayoutTests/fast/forms/resources/ValidityState-typeMismatch-email.js (210360 => 210361)


--- trunk/LayoutTests/fast/forms/resources/ValidityState-typeMismatch-email.js	2017-01-05 18:29:00 UTC (rev 210360)
+++ trunk/LayoutTests/fast/forms/resources/ValidityState-typeMismatch-email.js	2017-01-05 18:31:27 UTC (rev 210361)
@@ -33,7 +33,6 @@
 emailCheck("a@b.b", "a@b.b", expectValid);
 emailCheck("a/b...@domain.com", "a/b...@domain.com", expectValid);
 emailCheck("{}@domain.com", "{}@domain.com", expectValid);
-emailCheck("ddjk-s...@asl-.com", "ddjk-s...@asl-.com", expectValid);
 emailCheck("m*'!%@something.sa", "m*'!%@something.sa", expectValid);
 emailCheck("tu!!7n7.ad##0!!!@company.ca", "tu!!7n7.ad##0!!!@company.ca", expectValid);
 emailCheck("%@com.com", "%@com.com", expectValid);
@@ -41,8 +40,6 @@
 emailCheck(".wo...@example.com", ".wo...@example.com", expectValid);
 emailCheck("wo.....@example.com", "wo.....@example.com", expectValid);
 emailCheck("some...@do-ma-in.com", "some...@do-ma-in.com", expectValid);
-emailCheck("some...@do-.com", "some...@do-.com", expectValid);
-emailCheck("someb...@-.com", "someb...@-.com", expectValid);
 emailCheck("somebody@example", "somebody@example", expectValid);
 emailCheck("\u00...@p.com\u000A", "a...@p.com", expectValid);
 emailCheck("\u00...@p.com\u000D", "a...@p.com", expectValid);
@@ -56,6 +53,8 @@
 emailCheck("\u00...@p.com\u0020", "a...@p.com", expectValid);
 emailCheck("\u00...@p.com\u0009", "a...@p.com", expectValid);
 emailCheck("\u00...@p.com\u000C", "a...@p.com", expectValid);
+emailCheck("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...@p.com", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...@p.com", expectValid); // 64 characters in left part.
+emailCheck("a@ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp.ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "a@ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp.ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", expectValid); // Labels with 63 characters.
 
 debug("Invalid single addresses when 'multiple' attribute is not set.");
 emailCheck("invalid:em...@example.com", "invalid:em...@example.com", expectInvalid);
@@ -81,6 +80,11 @@
 emailCheck("a\u0...@p.com", "a\u0...@p.com", expectInvalid);
 emailCheck("a\u2...@p.com", "a\u2...@p.com", expectInvalid);
 emailCheck("a\u3...@p.com", "a\u3...@p.com", expectInvalid);
+emailCheck("ddjk-s...@asl-.com", "ddjk-s...@asl-.com", expectInvalid); // Domain should end with a letter or a digit.
+emailCheck("some...@do-.com", "some...@do-.com", expectInvalid); // Domain should end with a letter or a digit.
+emailCheck("someb...@-.com", "someb...@-.com", expectInvalid); // Domain should start with a letter or a digit.
+emailCheck("a...@pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp.com", "a...@pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp.com", expectInvalid); // Label with 64 characters.
+emailCheck("a@p.cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "a@p.cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", expectInvalid); // Label with 64 characters.
 
 debug("Valid single addresses when 'multiple' attribute is set.");
 emailCheck("someth...@something.com", "someth...@something.com", expectValid, multiple);
@@ -89,7 +93,6 @@
 emailCheck("a@b.b", "a@b.b", expectValid, multiple);
 emailCheck("a/b...@domain.com", "a/b...@domain.com", expectValid, multiple);
 emailCheck("{}@domain.com", "{}@domain.com", expectValid, multiple);
-emailCheck("ddjk-s...@asl-.com", "ddjk-s...@asl-.com", expectValid, multiple);
 emailCheck("m*'!%@something.sa", "m*'!%@something.sa", expectValid, multiple);
 emailCheck("tu!!7n7.ad##0!!!@company.ca", "tu!!7n7.ad##0!!!@company.ca", expectValid, multiple);
 emailCheck("%@com.com", "%@com.com", expectValid, multiple);
@@ -97,8 +100,6 @@
 emailCheck(".wo...@example.com", ".wo...@example.com", expectValid, multiple);
 emailCheck("wo.....@example.com", "wo.....@example.com", expectValid, multiple);
 emailCheck("some...@do-ma-in.com", "some...@do-ma-in.com", expectValid, multiple);
-emailCheck("some...@do-.com", "some...@do-.com", expectValid, multiple);
-emailCheck("someb...@-.com", "someb...@-.com", expectValid, multiple);
 emailCheck("somebody@example", "somebody@example", expectValid, multiple);
 emailCheck("\u00...@p.com\u0020", "a...@p.com", expectValid, multiple);
 emailCheck("\u00...@p.com\u0009", "a...@p.com", expectValid, multiple);
@@ -112,6 +113,8 @@
 emailCheck(" a...@p.com", "a...@p.com", expectValid, multiple);
 emailCheck("a...@p.com ", "a...@p.com", expectValid, multiple);
 emailCheck(" a...@p.com ", "a...@p.com", expectValid, multiple);
+emailCheck("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...@p.com", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...@p.com", expectValid, multiple); // 64 characters in left part.
+emailCheck("a@ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp.ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "a@ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp.ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", expectValid, multiple); // Labels with 63 characters.
 
 debug("Invalid single addresses when 'multiple' attribute is set.");
 emailCheck("invalid:em...@example.com", "invalid:em...@example.com", expectInvalid, multiple);
@@ -140,6 +143,11 @@
 emailCheck("a\u0...@p.com", "a\u0...@p.com", expectInvalid, multiple);
 emailCheck("a\u2...@p.com", "a\u2...@p.com", expectInvalid, multiple);
 emailCheck("a\u3...@p.com", "a\u3...@p.com", expectInvalid, multiple);
+emailCheck("ddjk-s...@asl-.com", "ddjk-s...@asl-.com", expectInvalid, multiple); // Domain should end with a letter or a digit.
+emailCheck("some...@do-.com", "some...@do-.com", expectInvalid, multiple); // Domain should end with a letter or a digit.
+emailCheck("someb...@-.com", "someb...@-.com", expectInvalid, multiple); // Domain should start with a letter or a digit.
+emailCheck("a...@pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp.com", "a...@pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp.com", expectInvalid, multiple); // Label with 64 characters.
+emailCheck("a@p.cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", "a@p.cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc", expectInvalid, multiple); // Label with 64 characters.
 
 debug("Valid multiple addresses when 'multiple' attribute is set.");
 emailCheck("some...@somewhere.com,j...@doe.com,a@b.c,a/b@c.c,ualla@ualla.127", "some...@somewhere.com,j...@doe.com,a@b.c,a/b@c.c,ualla@ualla.127", expectValid, multiple);

Modified: trunk/Source/WebCore/ChangeLog (210360 => 210361)


--- trunk/Source/WebCore/ChangeLog	2017-01-05 18:29:00 UTC (rev 210360)
+++ trunk/Source/WebCore/ChangeLog	2017-01-05 18:31:27 UTC (rev 210361)
@@ -1,3 +1,22 @@
+2017-01-05  Chris Dumez  <cdu...@apple.com>
+
+        Form validation: Align email validation with the latest HTML specification
+        https://bugs.webkit.org/show_bug.cgi?id=166697
+        <rdar://problem/29870245>
+
+        Reviewed by Alex Christensen.
+
+        Align email validation with the latest HTML specification:
+        - https://html.spec.whatwg.org/#valid-e-mail-address
+
+        It particular, the following changes were made:
+        - The first and last character of the domain now needs to be a letter or a digit
+        - Parts of the domain can only be 63 characters in length
+
+        No new tests, extended existing test.
+
+        * html/EmailInputType.cpp:
+
 2017-01-05  Enrica Casucci  <enr...@apple.com>
 
         Support File Promise during drag for macOS.

Modified: trunk/Source/WebCore/html/EmailInputType.cpp (210360 => 210361)


--- trunk/Source/WebCore/html/EmailInputType.cpp	2017-01-05 18:29:00 UTC (rev 210360)
+++ trunk/Source/WebCore/html/EmailInputType.cpp	2017-01-05 18:31:27 UTC (rev 210361)
@@ -34,10 +34,8 @@
 
 namespace WebCore {
 
-static const char emailPattern[] =
-    "[a-z0-9!#$%&'*+/=?^_`{|}~.-]+" // local part
-    "@"
-    "[a-z0-9-]+(\\.[a-z0-9-]+)*"; // domain part
+// From https://html.spec.whatwg.org/#valid-e-mail-address.
+static const char emailPattern[] = "^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$";
 
 static bool isValidEmailAddress(const String& address)
 {
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to