summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/io/qurl.cpp2
-rw-r--r--tests/auto/qurl/tst_qurl.cpp11
2 files changed, 12 insertions, 1 deletions
diff --git a/src/corelib/io/qurl.cpp b/src/corelib/io/qurl.cpp
index 551a990..cf84eb5 100644
--- a/src/corelib/io/qurl.cpp
+++ b/src/corelib/io/qurl.cpp
@@ -3920,7 +3920,7 @@ void QUrlPrivate::parse(ParseOptions parseOptions) const
QByteArray h(parseData.host, parseData.hostLength);
that->host = fromPercentEncodingMutable(&h);
- that->port = parseData.port;
+ that->port = uint(parseData.port) <= 0xffffU ? parseData.port : -1;
that->path.clear();
that->encodedPath = QByteArray(parseData.path, parseData.pathLength);
diff --git a/tests/auto/qurl/tst_qurl.cpp b/tests/auto/qurl/tst_qurl.cpp
index 64c579c..64d8bda 100644
--- a/tests/auto/qurl/tst_qurl.cpp
+++ b/tests/auto/qurl/tst_qurl.cpp
@@ -692,6 +692,16 @@ void tst_QUrl::setUrl()
QCOMPARE(url.encodedPath().constData(), "text/javascript,d5%20%3D%20'five%5Cu0027s'%3B");
}
+ {
+ // invalid port number
+ QUrl url;
+ url.setEncodedUrl("foo://tel:2147483648");
+ QVERIFY(url.isValid()); // ### should be !isValid(), but the parser can't catch it
+ QCOMPARE(url.scheme(), QString("foo"));
+ QCOMPARE(url.host(), QString("tel"));
+ QCOMPARE(url.port(), -1);
+ }
+
{ //check it calls detach
QUrl u1("http://aaa.com");
QUrl u2 = u1;
@@ -3935,6 +3945,7 @@ void tst_QUrl::fromUserInput_data()
QTest::newRow("trash-0") << "example.org/test?someData=42%&someOtherData=abcde#anchor" << QUrl::fromEncoded("http://example.org/test?someData=42%25&someOtherData=abcde#anchor");
QTest::newRow("other-scheme-0") << "spotify:track:0hO542doVbfGDAGQULMORT" << QUrl("spotify:track:0hO542doVbfGDAGQULMORT");
QTest::newRow("other-scheme-1") << "weirdscheme:80:otherstuff" << QUrl("weirdscheme:80:otherstuff");
+ QTest::newRow("number-path-0") << "tel:2147483648" << QUrl("tel:2147483648");
// FYI: The scheme in the resulting url user
QUrl authUrl("user:pass@domain.com");