From d8a489ccc25fa86825eb1c5ad91669c26153cb18 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Tue, 1 Oct 2013 10:20:18 +0200 Subject: Fix temporary directory leak in tst_qsavefile. Task-number: QTBUG-33769 Change-Id: I5177f09df22fd2b9b0d9eca4301c383c600d5ab8 Reviewed-by: David Faure --- tests/auto/corelib/io/qsavefile/tst_qsavefile.cpp | 69 ++++++++--------------- 1 file changed, 24 insertions(+), 45 deletions(-) (limited to 'tests') diff --git a/tests/auto/corelib/io/qsavefile/tst_qsavefile.cpp b/tests/auto/corelib/io/qsavefile/tst_qsavefile.cpp index 44b1e0ec2a..04c083e653 100644 --- a/tests/auto/corelib/io/qsavefile/tst_qsavefile.cpp +++ b/tests/auto/corelib/io/qsavefile/tst_qsavefile.cpp @@ -56,6 +56,29 @@ # include #endif +// Restore permissions so that the QTemporaryDir cleanup can happen +class PermissionRestorer +{ + Q_DISABLE_COPY(PermissionRestorer) +public: + explicit PermissionRestorer(const QString& path) : m_path(path) {} + ~PermissionRestorer() { restore(); } + + inline void restore() + { + QFile file(m_path); +#ifdef Q_OS_UNIX + file.setPermissions(QFile::Permissions(QFile::ReadOwner | QFile::WriteOwner | QFile::ExeOwner)); +#else + file.setPermissions(QFile::WriteOwner); + file.remove(); +#endif + } + +private: + const QString m_path; +}; + class tst_QSaveFile : public QObject { Q_OBJECT @@ -177,27 +200,6 @@ void tst_QSaveFile::transactionalWriteNoPermissionsOnDir() { #ifdef Q_OS_UNIX QFETCH(bool, directWriteFallback); - // Restore permissions so that the QTemporaryDir cleanup can happen - class PermissionRestorer - { - QString m_path; - public: - PermissionRestorer(const QString& path) - : m_path(path) - {} - - ~PermissionRestorer() - { - restore(); - } - void restore() - { - QFile file(m_path); - file.setPermissions(QFile::Permissions(QFile::ReadOwner | QFile::WriteOwner | QFile::ExeOwner)); - } - }; - - QTemporaryDir dir; QVERIFY(dir.isValid()); QVERIFY(QFile(dir.path()).setPermissions(QFile::ReadOwner | QFile::ExeOwner)); @@ -256,6 +258,7 @@ void tst_QSaveFile::transactionalWriteNoPermissionsOnFile() QVERIFY(dir.isValid()); const QString targetFile = dir.path() + QString::fromLatin1("/outfile"); QFile file(targetFile); + PermissionRestorer permissionRestorer(targetFile); QVERIFY2(file.open(QIODevice::WriteOnly), msgCannotOpen(file).constData()); QCOMPARE(file.write("Hello"), Q_INT64_C(5)); file.close(); @@ -303,30 +306,6 @@ void tst_QSaveFile::transactionalWriteErrorRenaming() QVERIFY2(file.open(QIODevice::WriteOnly), msgCannotOpen(file).constData()); QCOMPARE(file.write("Hello"), qint64(5)); QVERIFY(!QFile::exists(targetFile)); - - // Restore permissions so that the QTemporaryDir cleanup can happen - class PermissionRestorer - { - public: - PermissionRestorer(const QString& path) - : m_path(path) - {} - - ~PermissionRestorer() - { - QFile file(m_path); -#ifdef Q_OS_UNIX - file.setPermissions(QFile::Permissions(QFile::ReadOwner | QFile::WriteOwner | QFile::ExeOwner)); -#else - file.setPermissions(QFile::WriteOwner); - file.remove(); -#endif - } - - private: - QString m_path; - }; - #ifdef Q_OS_UNIX // Make rename() fail for lack of permissions in the directory QFile dirAsFile(dir.path()); // yay, I have to use QFile to change a dir's permissions... -- cgit v1.2.3