From c615dcc44168d8e8e1e2134d69c3bd9607c603ea Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Fri, 19 Jul 2013 12:03:25 -0700 Subject: QUrl: do not decode "#" in fragments For some time, we've assumed that the URL specification had a mistake in that it didn't allow the "#" character to appear decoded in the fragment. We've gotten away with it so far. However, turns out that the CoreFoundation NSURL class doesn't like it. So we have to be stricter. [ChangeLog][Important Behavior Changes][QUrl and QUrlQuery] QUrl no longer decodes %23 found in the fragment to "#" in the output of toString(QUrl::FullyEncoded) or toEncoded() Task-number: QTBUG-31945 Change-Id: If5e0fb37bae84710986c9ca89bd69ec98437cd63 Reviewed-by: David Faure (KDE) --- tests/auto/corelib/io/qurl/tst_qurl.cpp | 8 ++++---- tests/manual/qdesktopservices/tst_qdesktopservices.cpp | 7 ++++++- 2 files changed, 10 insertions(+), 5 deletions(-) (limited to 'tests') diff --git a/tests/auto/corelib/io/qurl/tst_qurl.cpp b/tests/auto/corelib/io/qurl/tst_qurl.cpp index f2e4682418..2817e6d22c 100644 --- a/tests/auto/corelib/io/qurl/tst_qurl.cpp +++ b/tests/auto/corelib/io/qurl/tst_qurl.cpp @@ -2506,7 +2506,7 @@ void tst_QUrl::setEncodedFragment_data() QTest::newRow("basic test") << BA("http://www.kde.org") << BA("abc") << BA("http://www.kde.org#abc"); QTest::newRow("initial url has fragment") << BA("http://www.kde.org#old") << BA("new") << BA("http://www.kde.org#new"); QTest::newRow("encoded fragment") << BA("http://www.kde.org") << BA("a%20c") << BA("http://www.kde.org#a%20c"); - QTest::newRow("with #") << BA("http://www.kde.org") << BA("a#b") << BA("http://www.kde.org#a#b"); + QTest::newRow("with #") << BA("http://www.kde.org") << BA("a#b") << BA("http://www.kde.org#a%23b"); // toString uses "a#b" QTest::newRow("unicode") << BA("http://www.kde.org") << BA("\xc3\xa9") << BA("http://www.kde.org#%C3%A9"); QTest::newRow("binary") << BA("http://www.kde.org") << BA("\x00\xc0\x80", 3) << BA("http://www.kde.org#%00%C0%80"); } @@ -3151,12 +3151,12 @@ void tst_QUrl::componentEncodings_data() << "x://%5B%3A%2F%3F%23%40%5D:%5B%2F%3F%23%40%5D@host/%2F%3F%23?%23"; // 2) test that the other delimiters remain decoded - QTest::newRow("decoded-gendelims-unchanging") << QUrl("x://::@host/:@/[]?:/?@[]?##:/?@[]") + QTest::newRow("decoded-gendelims-unchanging") << QUrl("x://::@host/:@/[]?:/?@[]?#:/?@[]") << int(QUrl::FullyEncoded) << "" << ":" << "::" << "host" << "::@host" - << "/:@/[]" << ":/?@[]?" << "#:/?@[]" - << "x://::@host/:@/[]?:/?@[]?##:/?@[]"; + << "/:@/[]" << ":/?@[]?" << ":/?@[]" + << "x://::@host/:@/[]?:/?@[]?#:/?@[]"; // 3) and test that the same encoded sequences remain encoded QTest::newRow("encoded-gendelims-unchanging") << QUrl("x://:%3A@host/%3A%40%5B%5D?%3A%2F%3F%40%5B%5D#%23%3A%2F%3F%40%5B%5D") diff --git a/tests/manual/qdesktopservices/tst_qdesktopservices.cpp b/tests/manual/qdesktopservices/tst_qdesktopservices.cpp index 534816a01b..9c39002fba 100644 --- a/tests/manual/qdesktopservices/tst_qdesktopservices.cpp +++ b/tests/manual/qdesktopservices/tst_qdesktopservices.cpp @@ -104,6 +104,11 @@ void tst_QDesktopServices::openUrl_data() << QUrl("http://google.com/search?q=/profile/5") << "This should search \"/profile/5\" on Google."; + // see QTBUG-31945 + QTest::newRow("two-fragments") + << QUrl("http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40006926-CH3-SW81") + << "This should open \"Implementing a Container View Controller\" in the UIViewController docs"; + QTest::newRow("mail") << QUrl("mailto:development@qt-project.org") << "This should open an email composer with the destination set to development@qt-project.org"; @@ -118,7 +123,7 @@ void tst_QDesktopServices::openUrl() QFETCH(QUrl, data); QFETCH(QString, message); qWarning("\n\nOpening \"%s\": %s", qPrintable(data.toString()), qPrintable(message)); - QDesktopServices::openUrl(data); + QVERIFY(QDesktopServices::openUrl(data)); } QTEST_MAIN(tst_QDesktopServices) -- cgit v1.2.3