QFileSelector: Preserve path to root directory
While QFileSelector is documented to work on files, select accepts arbitrary URLs. Moreover, the QML engine can end up intercepting arbitrary (user provided) URLs, including to directories. Prior to this change, passing "file:///" or "/" to the function would break: We would temporarily get a "//" path, which is invalid, and thus we would return an invalid in the end. Prevent this by only appending a slash to the path when it doesn't have one. Fixes: QTBUG-85410 Pick-to: 6.2 Change-Id: I1d2807a9d225df611c3a5e871e3c1d90a6a25953 Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
This commit is contained in:
parent
ec0b44003b
commit
7b1b1d990b
@ -278,7 +278,10 @@ QString QFileSelectorPrivate::select(const QString &filePath) const
|
||||
Q_Q(const QFileSelector);
|
||||
QFileInfo fi(filePath);
|
||||
|
||||
QString ret = selectionHelper(fi.path().isEmpty() ? QString() : fi.path() + QLatin1Char('/'),
|
||||
QString pathString;
|
||||
if (auto path = fi.path(); !path.isEmpty())
|
||||
pathString = path.endsWith(u'/') ? path : path + u'/';
|
||||
QString ret = selectionHelper(pathString,
|
||||
fi.fileName(), q->allSelectors());
|
||||
|
||||
if (!ret.isEmpty())
|
||||
|
@ -215,6 +215,9 @@ void tst_QFileSelector::urlConvenience_data()
|
||||
strUrlWithFragment = QString("file:") + testWithQueryAndFragment;
|
||||
QTest::newRow("file with query and fragment too") << QUrl(strUrlWithFragment) << (QStringList()) << QUrl(strUrlWithFragment);
|
||||
|
||||
// preserve path to root
|
||||
QTest::newRow("path to root") << QUrl("file:///") << (QStringList()) << QUrl("file:///");
|
||||
|
||||
// http://qt-project.org/images/qtdn/sprites-combined-latest.png is chosen as a representative real world URL
|
||||
// But note that this test is checking that http urls are NOT selected so it shouldn't be checked
|
||||
QUrl testHttpUrl("http://qt-project.org/images/sprites-combined-latest.png");
|
||||
|
Loading…
Reference in New Issue
Block a user