summaryrefslogtreecommitdiffstats
path: root/tests/auto/widgets/dialogs
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@digia.com>2012-10-26 10:44:00 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2012-10-26 11:51:56 +0200
commitd0aa81ee104107db1ce41a9bf0f91d4cb144f7de (patch)
tree90e690af8d9738265b1699027b84d0227c8e6667 /tests/auto/widgets/dialogs
parent8ac2ea94d37126ef68d394e056bcaf7769a99956 (diff)
Fix a crash in QFileDialog when selecting an invalid name filter.
When nameDetailsVisible is set to false and an invalid/empty string is passed to selectNameFilter(), the regexp used to strip the filter off the suffixes returns empty and a crash occurs. Change-Id: I926ea49514ff25a103977d8121fca1cf83d647f5 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com> Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'tests/auto/widgets/dialogs')
-rw-r--r--tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp47
1 files changed, 46 insertions, 1 deletions
diff --git a/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp b/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp
index 32610fda18..8ce0742854 100644
--- a/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp
+++ b/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp
@@ -130,7 +130,9 @@ private slots:
void selectFilter();
void viewMode();
void proxymodel();
+ void setNameFilter_data();
void setNameFilter();
+ void setEmptyNameFilter();
void focus();
void caption();
void historyBack();
@@ -1003,13 +1005,56 @@ void tst_QFiledialog::proxymodel()
QCOMPARE(fd.proxyModel(), (QAbstractProxyModel*)0);
}
-void tst_QFiledialog::setNameFilter()
+void tst_QFiledialog::setEmptyNameFilter()
{
QNonNativeFileDialog fd;
fd.setNameFilter(QString());
fd.setNameFilters(QStringList());
}
+void tst_QFiledialog::setNameFilter_data()
+{
+ QTest::addColumn<bool>("nameFilterDetailsVisible");
+ QTest::addColumn<QStringList>("filters");
+ QTest::addColumn<QString>("selectFilter");
+ QTest::addColumn<QString>("expectedSelectedFilter");
+
+ QTest::newRow("namedetailsvisible-empty") << true << QStringList() << QString() << QString();
+ QTest::newRow("namedetailsinvisible-empty") << false << QStringList() << QString() << QString();
+
+ const QString anyFileNoDetails = QLatin1String("Any files");
+ const QString anyFile = anyFileNoDetails + QLatin1String(" (*)");
+ const QString imageFilesNoDetails = QLatin1String("Image files");
+ const QString imageFiles = imageFilesNoDetails + QLatin1String(" (*.png *.xpm *.jpg)");
+ const QString textFileNoDetails = QLatin1String("Text files");
+ const QString textFile = textFileNoDetails + QLatin1String(" (*.txt)");
+
+ QStringList filters;
+ filters << anyFile << imageFiles << textFile;
+
+ QTest::newRow("namedetailsvisible-images") << true << filters << imageFiles << imageFiles;
+ QTest::newRow("namedetailsinvisible-images") << false << filters << imageFiles << imageFilesNoDetails;
+
+ const QString invalid = "foo";
+ QTest::newRow("namedetailsvisible-invalid") << true << filters << invalid << anyFile;
+ // Potential crash when trying to convert the invalid filter into a list and stripping it, resulting in an empty list.
+ QTest::newRow("namedetailsinvisible-invalid") << false << filters << invalid << anyFileNoDetails;
+}
+
+void tst_QFiledialog::setNameFilter()
+{
+ QFETCH(bool, nameFilterDetailsVisible);
+ QFETCH(QStringList, filters);
+ QFETCH(QString, selectFilter);
+ QFETCH(QString, expectedSelectedFilter);
+
+ QNonNativeFileDialog fd;
+ fd.setNameFilters(filters);
+ fd.setNameFilterDetailsVisible(nameFilterDetailsVisible);
+ fd.selectNameFilter(selectFilter);
+ QCOMPARE(fd.selectedNameFilter(), expectedSelectedFilter);
+}
+
void tst_QFiledialog::focus()
{
QNonNativeFileDialog fd;