diff options
author | Thiago Macieira <thiago.macieira@intel.com> | 2020-09-16 20:48:38 -0700 |
---|---|---|
committer | Thiago Macieira <thiago.macieira@intel.com> | 2020-10-05 21:31:18 -0700 |
commit | 97de53ee8cce3dc6347b08668f0de45e1000f01c (patch) | |
tree | 404a1464492e8e999360d92ce47e7a10258003c8 /tests/auto/corelib/io | |
parent | dfa35ee6c8c919ccf1ae378074cf1b5501c24d9e (diff) |
QUrl::fromLocalFile: accept invalid hostnames
QUrl hostnames must be compliant with STD3, but we must somehow accept
file paths that begin with double slash but aren't valid hostnames.
Because the file URI spec requires us to start with "file://" anyway, we
can represent those with four slashes. Note that on Unix "//X/y" is a
valid but local file path. If given to QUrl::fromLocalFile(), if the
path at the root does parse as a hostname, we will still try to
normalize (the above becomes "file://x/y").
[ChangeLog][QtCore][QUrl] Changed QUrl::fromLocalFile() to accept
Windows UNC paths whose hostname component is not a valid Internet
hostname. This makes QUrl able to accept extended-length paths (\\?\),
device namespace (\\.\), WSL (\\wsl$), etc.
Pick-to: 5.15
Fixes: QTBUG-86277
Change-Id: I3eb349b832c14610895efffd1635759348214a3b
Reviewed-by: David Faure <david.faure@kdab.com>
Diffstat (limited to 'tests/auto/corelib/io')
-rw-r--r-- | tests/auto/corelib/io/qurl/tst_qurl.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/tests/auto/corelib/io/qurl/tst_qurl.cpp b/tests/auto/corelib/io/qurl/tst_qurl.cpp index 896674e67c..45a311230f 100644 --- a/tests/auto/corelib/io/qurl/tst_qurl.cpp +++ b/tests/auto/corelib/io/qurl/tst_qurl.cpp @@ -1275,6 +1275,9 @@ void tst_QUrl::toLocalFile_data() QTest::newRow("windows-unc-path") << QString::fromLatin1("file://somehost/somedir/somefile") << QString::fromLatin1("//somehost/somedir/somefile"); QTest::newRow("windows-unc-root") << QString::fromLatin1("file://somehost/") << QString::fromLatin1("//somehost/"); QTest::newRow("windows-unc-nopath") << QString::fromLatin1("file://somehost") << QString::fromLatin1("//somehost"); + QTest::newRow("windows-extlen-path") << QString::fromLatin1("file:////%3F/somedir/somefile") << QString::fromLatin1("//?/somedir/somefile"); + QTest::newRow("windows-wsl-path") << QString::fromLatin1("file:////wsl$/somedir/somefile") << QString::fromLatin1("//wsl$/somedir/somefile"); + QTest::newRow("windows-device-path") << QString::fromLatin1("file:////./somedir/somefile") << QString::fromLatin1("//./somedir/somefile"); // and some that result in empty (i.e., not local) QTest::newRow("noscheme-absolute") << QString::fromLatin1("/a.txt") << QString(); @@ -1327,6 +1330,18 @@ void tst_QUrl::fromLocalFile_data() << QString("file://somehost") + suffix << QString(suffix); #endif + QTest::addRow("windows-extlen-%s", pathDescription) + << QString("//?") + suffix + << QString("file:////%3F") + suffix + << QString("//?") + suffix; + QTest::addRow("windows-wsl-%s", pathDescription) + << QString("//wsl$") + suffix + << QString("file:////wsl$") + suffix + << QString("//wsl$") + suffix; + QTest::addRow("windows-device--%s", pathDescription) + << QString("//.") + suffix + << QString("file:////.") + suffix + << QString("//.") + suffix; } QTest::newRow("windows-webdav") |