Bulgarian TLD should not punycode-encode URLs with Bulgarian Cyrillic characters
authorachristensen@apple.com <achristensen@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 15 Jan 2019 02:14:16 +0000 (02:14 +0000)
committerachristensen@apple.com <achristensen@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 15 Jan 2019 02:14:16 +0000 (02:14 +0000)
https://bugs.webkit.org/show_bug.cgi?id=193411
<rdar://problem/47215929>

Reviewed by Alexey Proskuryakov.

Source/WTF:

* wtf/cocoa/NSURLExtras.mm:
(WTF::allCharactersAllowedByTLDRules):

LayoutTests:

* fast/url/user-visible/cyrillic-NFD-expected.txt:
* fast/url/user-visible/cyrillic-NFD.html:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@239967 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/fast/url/user-visible/cyrillic-NFD-expected.txt
LayoutTests/fast/url/user-visible/cyrillic-NFD.html
Source/WTF/ChangeLog
Source/WTF/wtf/cocoa/NSURLExtras.mm

index 52781b4..efffecf 100644 (file)
@@ -1,3 +1,14 @@
+2019-01-14  Alex Christensen  <achristensen@webkit.org>
+
+        Bulgarian TLD should not punycode-encode URLs with Bulgarian Cyrillic characters
+        https://bugs.webkit.org/show_bug.cgi?id=193411
+        <rdar://problem/47215929>
+
+        Reviewed by Alexey Proskuryakov.
+
+        * fast/url/user-visible/cyrillic-NFD-expected.txt:
+        * fast/url/user-visible/cyrillic-NFD.html:
+
 2019-01-14  John Wilander  <wilander@apple.com>
 
         Restructure http/tests/resourceLoadStatistics/remove-blocking-in-redirect.html to address flakiness
index 9f1d109..2193b9f 100644 (file)
@@ -5,6 +5,11 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
 
 PASS test('http://спецодежда.онлайн/') is 'http://спецодежда.онлайн/'
 PASS test('http://спецодежда.онлайн/') is 'http://спецодежда.онлайн/'
+PASS test('http://ж1-2.бг/') is 'http://ж1-2.бг/'
+PASS test('http://жabc.бг/') is 'http://xn--abc-udd.xn--90ae/'
+PASS test('http://abc.бг/') is 'http://abc.xn--90ae/'
+PASS test('http://ы.бг/') is 'http://xn--01a.xn--90ae/'
+PASS test('http://э.бг/') is 'http://xn--21a.xn--90ae/'
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 8197271..5f169dd 100644 (file)
@@ -17,6 +17,11 @@ function test(url)
 
 shouldBe("test('http://спецодежда.онла\u0439н/')", "'http://спецодежда.онлайн/'");
 shouldBe("test('http://спецодежда.онла\u0438\u0306н/')", "'http://спецодежда.онлайн/'");
+shouldBe("test('http://ж1-2.бг/')", "'http://ж1-2.бг/'");
+shouldBe("test('http://жabc.бг/')", "'http://xn--abc-udd.xn--90ae/'");
+shouldBe("test('http://abc.бг/')", "'http://abc.xn--90ae/'");
+shouldBe("test('http://ы.бг/')", "'http://xn--01a.xn--90ae/'");
+shouldBe("test('http://э.бг/')", "'http://xn--21a.xn--90ae/'");
 
 </script>
 <script src="../../../resources/js-test-post.js"></script>
index 9d0ae3e..23a1c5b 100644 (file)
@@ -1,3 +1,14 @@
+2019-01-14  Alex Christensen  <achristensen@webkit.org>
+
+        Bulgarian TLD should not punycode-encode URLs with Bulgarian Cyrillic characters
+        https://bugs.webkit.org/show_bug.cgi?id=193411
+        <rdar://problem/47215929>
+
+        Reviewed by Alexey Proskuryakov.
+
+        * wtf/cocoa/NSURLExtras.mm:
+        (WTF::allCharactersAllowedByTLDRules):
+
 2019-01-12  Timothy Hatcher  <timothy@apple.com>
 
         Have prefers-color-scheme: light always match on macOS versions before Mojave.
index 8622700..3de3f22 100644 (file)
@@ -540,6 +540,16 @@ static BOOL allCharactersAllowedByTLDRules(const UChar* buffer, int32_t length)
         return (ch >= 0x0430 && ch <= 0x044f) || ch == 0x0451 || ch == 0x04E9 || ch == 0x04AF || isASCIIDigit(ch) || ch == '-';
     });
 
+    // https://www.icann.org/sites/default/files/packages/lgr/lgr-second-level-bulgarian-30aug16-en.html
+    static const UChar cyrillicBG[] = {
+        '.',
+        0x0431, // CYRILLIC SMALL LETTER BE
+        0x0433 // CYRILLIC SMALL LETTER GHE
+    };
+    CHECK_RULES_IF_SUFFIX_MATCHES(cyrillicBG, [](UChar ch) {
+        return (ch >= 0x0430 && ch <= 0x044A) || ch == 0x044C || (ch >= 0x044E && ch <= 0x0450) || ch == 0x045D || isASCIIDigit(ch) || ch == '-';
+    });
+
     // Not a known top level domain with special rules.
     return NO;
 }