QUrl: update top level domains that may contain non-ASCII characters

Most notably, .com and .net now may contain non-ASCII characters.
list has been generated from
http://www.mozilla.org/projects/security/tld-idn-policy-list.html

Change-Id: Idc3191dc782bc4173ccb19b4bc81f4f061ca7999
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
Peter Hartmann 2013-02-06 15:26:22 +01:00 committed by The Qt Project
parent 658616b44e
commit b20d15b58b
3 changed files with 56 additions and 8 deletions

View File

@ -2336,27 +2336,42 @@ Q_AUTOTEST_EXPORT QString qt_punycodeDecoder(const QString &pc)
} }
static const char * const idn_whitelist[] = { static const char * const idn_whitelist[] = {
"ac", "ar", "at", "ac", "ar", "asia", "at",
"biz", "br", "biz", "br",
"cat", "ch", "cl", "cn", "cat", "ch", "cl", "cn", "com",
"de", "dk", "de", "dk",
"es", "es",
"fi", "fi",
"gr", "gr",
"hu", "hu",
"info", "io", "is", "il", "info", "io", "is", "ir",
"jp", "jp",
"kr", "kr",
"li", "lt", "li", "lt", "lu", "lv",
"museum", "museum",
"no", "name", "net", "no", "nu", "nz",
"org", "org",
"pl", "pr",
"se", "sh", "se", "sh",
"th", "tm", "tw", "tel", "th", "tm", "tw",
"ua",
"vn", "vn",
"xn--fiqs8s", // China
"xn--fiqz9s", // China
"xn--fzc2c9e2c", // Sri Lanka
"xn--j6w193g", // Hong Kong
"xn--kprw13d", // Taiwan
"xn--kpry57d", // Taiwan
"xn--mgba3a4f16a", // Iran
"xn--mgba3a4fra", // Iran
"xn--mgbaam7a8h", // UAE "xn--mgbaam7a8h", // UAE
"xn--mgbayh7gpa", // Jordan
"xn--mgberp4a5d4ar", // Saudi Arabia "xn--mgberp4a5d4ar", // Saudi Arabia
"xn--wgbh1c" // Egypt "xn--ogbpf8fl", // Syria
"xn--p1ai", // Russian Federation
"xn--wgbh1c", // Egypt
"xn--wgbl6a", // Qatar
"xn--xkc2al3hye2a" // Sri Lanka
}; };
static const size_t idn_whitelist_size = sizeof idn_whitelist / sizeof *idn_whitelist; static const size_t idn_whitelist_size = sizeof idn_whitelist / sizeof *idn_whitelist;

View File

@ -2184,33 +2184,52 @@ void tst_QUrl::tldRestrictions_data()
// current whitelist // current whitelist
QTest::newRow("ac") << QString("ac") << true; QTest::newRow("ac") << QString("ac") << true;
QTest::newRow("ar") << QString("ar") << true;
QTest::newRow("asia") << QString("asia") << true;
QTest::newRow("at") << QString("at") << true; QTest::newRow("at") << QString("at") << true;
QTest::newRow("biz") << QString("biz") << true;
QTest::newRow("br") << QString("br") << true; QTest::newRow("br") << QString("br") << true;
QTest::newRow("cat") << QString("cat") << true; QTest::newRow("cat") << QString("cat") << true;
QTest::newRow("ch") << QString("ch") << true; QTest::newRow("ch") << QString("ch") << true;
QTest::newRow("cl") << QString("cl") << true; QTest::newRow("cl") << QString("cl") << true;
QTest::newRow("cn") << QString("cn") << true; QTest::newRow("cn") << QString("cn") << true;
QTest::newRow("com") << QString("com") << true;
QTest::newRow("de") << QString("de") << true; QTest::newRow("de") << QString("de") << true;
QTest::newRow("dk") << QString("dk") << true; QTest::newRow("dk") << QString("dk") << true;
QTest::newRow("es") << QString("es") << true;
QTest::newRow("fi") << QString("fi") << true; QTest::newRow("fi") << QString("fi") << true;
QTest::newRow("gr") << QString("gr") << true;
QTest::newRow("hu") << QString("hu") << true; QTest::newRow("hu") << QString("hu") << true;
QTest::newRow("il") << QString("il") << true;
QTest::newRow("info") << QString("info") << true; QTest::newRow("info") << QString("info") << true;
QTest::newRow("io") << QString("io") << true; QTest::newRow("io") << QString("io") << true;
QTest::newRow("is") << QString("is") << true;
QTest::newRow("ir") << QString("ir") << true;
QTest::newRow("jp") << QString("jp") << true; QTest::newRow("jp") << QString("jp") << true;
QTest::newRow("kr") << QString("kr") << true; QTest::newRow("kr") << QString("kr") << true;
QTest::newRow("li") << QString("li") << true; QTest::newRow("li") << QString("li") << true;
QTest::newRow("lt") << QString("lt") << true; QTest::newRow("lt") << QString("lt") << true;
QTest::newRow("lu") << QString("lu") << true;
QTest::newRow("lv") << QString("lv") << true;
QTest::newRow("museum") << QString("museum") << true; QTest::newRow("museum") << QString("museum") << true;
QTest::newRow("name") << QString("name") << true;
QTest::newRow("net") << QString("name") << true;
QTest::newRow("no") << QString("no") << true; QTest::newRow("no") << QString("no") << true;
QTest::newRow("nu") << QString("nu") << true;
QTest::newRow("nz") << QString("nz") << true;
QTest::newRow("org") << QString("org") << true;
QTest::newRow("pl") << QString("pl") << true;
QTest::newRow("pr") << QString("pr") << true;
QTest::newRow("se") << QString("se") << true; QTest::newRow("se") << QString("se") << true;
QTest::newRow("sh") << QString("sh") << true; QTest::newRow("sh") << QString("sh") << true;
QTest::newRow("tel") << QString("tel") << true;
QTest::newRow("th") << QString("th") << true; QTest::newRow("th") << QString("th") << true;
QTest::newRow("tm") << QString("tm") << true; QTest::newRow("tm") << QString("tm") << true;
QTest::newRow("tw") << QString("tw") << true; QTest::newRow("tw") << QString("tw") << true;
QTest::newRow("ua") << QString("ua") << true;
QTest::newRow("vn") << QString("vn") << true; QTest::newRow("vn") << QString("vn") << true;
// known blacklists: // known blacklists:
QTest::newRow("com") << QString("com") << false;
QTest::newRow("foo") << QString("foo") << false; QTest::newRow("foo") << QString("foo") << false;
} }

View File

@ -649,6 +649,20 @@ void tst_QUrlInternal::ace_testsuite_data()
<< "xn----rmckbbajlc6dj7bxne2c.xn--wgbh1c" << "xn----rmckbbajlc6dj7bxne2c.xn--wgbh1c"
<< "." << "."
<< egyptianIDN; << egyptianIDN;
QString russianIDN = QString::fromUtf8("\321\217\320\275\320\264\320\265\320\272\321\201.\321\200\321\204");
QTest::newRow("russian-tld-ace")
<< "xn--d1acpjx3f.xn--p1ai"
<< "xn--d1acpjx3f.xn--p1ai"
<< "."
<< russianIDN;
QString taiwaneseIDN = QString::fromUtf8("\345\217\260\345\214\227\346\214\211\346\221\251.\345\217\260\347\201\243");
QTest::newRow("taiwanese-tld-ace")
<< "xn--djrptm67aikb.xn--kpry57d"
<< "xn--djrptm67aikb.xn--kpry57d"
<< "."
<< taiwaneseIDN;
} }
void tst_QUrlInternal::ace_testsuite() void tst_QUrlInternal::ace_testsuite()