summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Faure <faure+bluesystems@kde.org>2012-12-21 17:38:19 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-01-14 21:44:54 +0100
commit2e97dd401a09e4a9027dea885db7fd95e961a0c5 (patch)
treeacff6664b12894ba1ec941347c73bb9d9ede4c75
parent1e1486b9cf49e1bb26f44cde7f7a6667614585b0 (diff)
QUrl::fromUserInput: fix for urls without a host.
QUrl::fromUserInput("http://") was invalid, which doesn't make sense since QUrl("http://") is valid. Same for "smb:" which is actually even more a valid URL from a user's point of view. Change-Id: I371ac393d61b49499edf5adbbc2a90b426fe9e5d (cherry-picked from qt5 commit 8b2728ec382565c5bd57148600e34740a3c3fe52) Reviewed-by: David Faure (KDE) <faure@kde.org>
-rw-r--r--src/corelib/io/qurl.cpp3
-rw-r--r--tests/auto/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 4b0bc39522..551a990e93 100644
--- a/src/corelib/io/qurl.cpp
+++ b/src/corelib/io/qurl.cpp
@@ -6684,12 +6684,11 @@ QUrl QUrl::fromUserInput(const QString &userInput)
QUrl url = QUrl::fromEncoded(trimmedString.toUtf8(), QUrl::TolerantMode);
QUrl urlPrepended = QUrl::fromEncoded("http://" + trimmedString.toUtf8(), QUrl::TolerantMode);
- // Check the most common case of a valid url with scheme and host
+ // Check the most common case of a valid url with a scheme
// We check if the port would be valid by adding the scheme to handle the case host:port
// where the host would be interpretted as the scheme
if (url.isValid()
&& !url.scheme().isEmpty()
- && (!url.host().isEmpty() || !url.path().isEmpty())
&& urlPrepended.port() == -1)
return url;
diff --git a/tests/auto/qurl/tst_qurl.cpp b/tests/auto/qurl/tst_qurl.cpp
index 737f0e9286..64c579c009 100644
--- a/tests/auto/qurl/tst_qurl.cpp
+++ b/tests/auto/qurl/tst_qurl.cpp
@@ -3908,6 +3908,10 @@ void tst_QUrl::fromUserInput_data()
QTest::newRow("add scheme-2") << "ftp.example.org" << QUrl("ftp://ftp.example.org");
QTest::newRow("add scheme-3") << "hostname" << QUrl("http://hostname");
+ // no host
+ QTest::newRow("nohost-1") << "http://" << QUrl("http://");
+ QTest::newRow("nohost-2") << "smb:" << QUrl("smb:");
+
// QUrl's tolerant parser should already handle this
QTest::newRow("not-encoded-0") << "http://example.org/test page.html" << QUrl::fromEncoded("http://example.org/test%20page.html");