summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2012-07-31 13:10:54 +0200
committerQt by Nokia <qt-info@nokia.com>2012-08-01 13:04:12 +0200
commit4d1f0ccbf31c7aed9629e6b9e9bdd6b903119b11 (patch)
tree6d6e0d77e69397d8801370861205d14893df39f6
parent44a7330d675ce6b7eebb35060bb02d63d608fc65 (diff)
Fix handling of encoded NULs (%00) in QUrl::fromPercentEncoding
QString::fromUtf8, without an explicit size, (currently) defaults to stopping at the first NUL. That means we need to pass an explicit size. Also take the opportunity to test that QUrl::toPercentEncoding also works with the same data. Change-Id: I79362d67afda624b01ca07b0315b611c4aa3fdda Reviewed-by: Lars Knoll <lars.knoll@nokia.com> Reviewed-by: David Faure <faure@kde.org>
-rw-r--r--src/corelib/io/qurl.cpp3
-rw-r--r--tests/auto/corelib/io/qurl/tst_qurl.cpp4
2 files changed, 5 insertions, 2 deletions
diff --git a/src/corelib/io/qurl.cpp b/src/corelib/io/qurl.cpp
index 4897e5b07c..b009073848 100644
--- a/src/corelib/io/qurl.cpp
+++ b/src/corelib/io/qurl.cpp
@@ -2516,7 +2516,8 @@ QUrl QUrl::fromEncoded(const QByteArray &input, ParsingMode mode)
*/
QString QUrl::fromPercentEncoding(const QByteArray &input)
{
- return QString::fromUtf8(QByteArray::fromPercentEncoding(input));
+ QByteArray ba = QByteArray::fromPercentEncoding(input);
+ return QString::fromUtf8(ba, ba.size());
}
/*!
diff --git a/tests/auto/corelib/io/qurl/tst_qurl.cpp b/tests/auto/corelib/io/qurl/tst_qurl.cpp
index 7ee4f74999..f94b0441f8 100644
--- a/tests/auto/corelib/io/qurl/tst_qurl.cpp
+++ b/tests/auto/corelib/io/qurl/tst_qurl.cpp
@@ -1397,6 +1397,7 @@ void tst_QUrl::compat_decode_data()
QTest::newRow("HTTPUrl") << QByteArray("http://qt.nokia.com") << QString("http://qt.nokia.com");
QTest::newRow("HTTPUrlEncoded") << QByteArray("http://qt%20nokia%20com") << QString("http://qt nokia com");
QTest::newRow("EmptyString") << QByteArray("") << QString("");
+ QTest::newRow("NulByte") << QByteArray("C%00%0A") << QString::fromLatin1("C\0\n", 3);
QTest::newRow("Task27166") << QByteArray("Fran%C3%A7aise") << QString::fromUtf8("Fran├žaise");
}
@@ -1419,6 +1420,7 @@ void tst_QUrl::compat_encode_data()
QTest::newRow("HTTPUrl") << QString("http://qt.nokia.com") << QByteArray("http%3A//qt.nokia.com");
QTest::newRow("HTTPUrlEncoded") << QString("http://qt nokia com") << QByteArray("http%3A//qt%20nokia%20com");
QTest::newRow("EmptyString") << QString("") << QByteArray("");
+ QTest::newRow("NulByte") << QString::fromLatin1("C\0\n", 3) << QByteArray("C%00%0A");
QTest::newRow("Task27166") << QString::fromUtf8("Fran├žaise") << QByteArray("Fran%C3%A7aise");
}
@@ -1427,7 +1429,7 @@ void tst_QUrl::compat_encode()
QFETCH(QString, decodedString);
QFETCH(QByteArray, encodedString);
- QCOMPARE(QUrl::toPercentEncoding(decodedString, "/.").constData(), encodedString.constData());
+ QCOMPARE(QUrl::toPercentEncoding(decodedString, "/."), encodedString);
}