diff options
-rw-r--r-- | src/corelib/io/qurl.cpp | 2 | ||||
-rw-r--r-- | tests/auto/qurl/tst_qurl.cpp | 11 |
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"); |