summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/io/qtemporarydir.cpp5
-rw-r--r--tests/auto/corelib/io/qtemporarydir/tst_qtemporarydir.cpp14
2 files changed, 18 insertions, 1 deletions
diff --git a/src/corelib/io/qtemporarydir.cpp b/src/corelib/io/qtemporarydir.cpp
index 5e0def74ee..5f0c500183 100644
--- a/src/corelib/io/qtemporarydir.cpp
+++ b/src/corelib/io/qtemporarydir.cpp
@@ -128,8 +128,11 @@ static char *q_mkdtemp(char *templateName)
QFile::ReadOwner |
QFile::WriteOwner |
QFile::ExeOwner, error);
- if (error.error() != 0)
+ if (error.error() != 0) {
+ if (!QFileSystemEngine::removeDirectory(fileSystemEntry, false))
+ qWarning() << "Unable to remove unused directory" << templateNameStr;
continue;
+ }
return templateName;
}
}
diff --git a/tests/auto/corelib/io/qtemporarydir/tst_qtemporarydir.cpp b/tests/auto/corelib/io/qtemporarydir/tst_qtemporarydir.cpp
index a68a1185b8..e909b90a12 100644
--- a/tests/auto/corelib/io/qtemporarydir/tst_qtemporarydir.cpp
+++ b/tests/auto/corelib/io/qtemporarydir/tst_qtemporarydir.cpp
@@ -70,6 +70,8 @@ private slots:
void QTBUG_4796_data();
void QTBUG_4796();
+ void QTBUG43352_failedSetPermissions();
+
public:
};
@@ -419,5 +421,17 @@ void tst_QTemporaryDir::QTBUG_4796() // unicode support
cleaner.reset();
}
+void tst_QTemporaryDir::QTBUG43352_failedSetPermissions()
+{
+ QString path = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation) + QStringLiteral("/");
+ int count = QDir(path).entryList().size();
+
+ {
+ QTemporaryDir dir(path);
+ }
+
+ QCOMPARE(QDir(path).entryList().size(), count);
+}
+
QTEST_MAIN(tst_QTemporaryDir)
#include "tst_qtemporarydir.moc"