summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2013-06-08 02:20:32 (GMT)
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-06-21 00:31:54 (GMT)
commitf607530faf94bcee975a54042d817e9705a4dba1 (patch)
tree68f952567c728db67ff2ea0e4ae0b0cfb43ec754
parent58507f6bdf32262dcb56d4d2c0c8c8a0812967b7 (diff)
downloadQt-f607530faf94bcee975a54042d817e9705a4dba1.zip
Qt-f607530faf94bcee975a54042d817e9705a4dba1.tar.gz
Qt-f607530faf94bcee975a54042d817e9705a4dba1.tar.bz2
QUrl stringprep: fix handling of U+0080: it's prohibited
Edge case: a > that should have been >=. Without it, we never ran the rest of the IDN nameprepping. (cherry-picked from qtbase commit 4d93393a6de2d6631979df2bc6d12aa43781dc6f) Change-Id: I2276d660de3a70d0c561bb18816820d9a0f47e77 Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
-rw-r--r--src/corelib/io/qurl.cpp2
-rw-r--r--tests/auto/qurl/tst_qurl.cpp5
2 files changed, 6 insertions, 1 deletions
diff --git a/src/corelib/io/qurl.cpp b/src/corelib/io/qurl.cpp
index af0dfa7..779dbb5 100644
--- a/src/corelib/io/qurl.cpp
+++ b/src/corelib/io/qurl.cpp
@@ -2975,7 +2975,7 @@ void qt_nameprep(QString *source, int from)
for ( ; out < e; ++out) {
register ushort uc = out->unicode();
- if (uc > 0x80) {
+ if (uc >= 0x80) {
break;
} else if (uc >= 'A' && uc <= 'Z') {
*out = QChar(uc | 0x20);
diff --git a/tests/auto/qurl/tst_qurl.cpp b/tests/auto/qurl/tst_qurl.cpp
index cd696e4..19306fa 100644
--- a/tests/auto/qurl/tst_qurl.cpp
+++ b/tests/auto/qurl/tst_qurl.cpp
@@ -3067,6 +3067,11 @@ void tst_QUrl::nameprep_testsuite_data()
<< QString::fromUtf8("\x10\x7F")
<< QString() << 0 << 0;
+ QTest::newRow("Non-ASCII 8bit control character U+0080")
+ << QString::fromUtf8("x\xC2\x80x")
+ << QString()
+ << QString("Nameprep") << 0 << STRINGPREP_CONTAINS_PROHIBITED;
+
QTest::newRow("Non-ASCII 8bit control character U+0085")
<< QString::fromUtf8("x\xC2\x85x")
<< QString()