summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/io/qdir
diff options
context:
space:
mode:
authorDavid Faure <faure@kde.org>2011-12-19 20:44:45 +0100
committerQt by Nokia <qt-info@nokia.com>2011-12-19 20:48:16 +0100
commit8707c09fcddb3d335ba79394f266a88129ba5ba2 (patch)
treedc98ae91da9ba970c222f4bc12da78a9ae526f95 /tests/auto/corelib/io/qdir
parent0443a51228e87499470536d570284a4bbab85d0f (diff)
Fix QDir::removeRecursively so it doesn't follow symlinks to directories.
Critical bug... Good thing I had backups of my $HOME. Change-Id: I43b3a80786c946b0aec797036c1164d436d521f8 Reviewed-by: Robin Burchell <robin+qt@viroteck.net> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
Diffstat (limited to 'tests/auto/corelib/io/qdir')
-rw-r--r--tests/auto/corelib/io/qdir/tst_qdir.cpp26
1 files changed, 26 insertions, 0 deletions
diff --git a/tests/auto/corelib/io/qdir/tst_qdir.cpp b/tests/auto/corelib/io/qdir/tst_qdir.cpp
index 5b48f9da00..32d74b163b 100644
--- a/tests/auto/corelib/io/qdir/tst_qdir.cpp
+++ b/tests/auto/corelib/io/qdir/tst_qdir.cpp
@@ -100,6 +100,7 @@ private slots:
void removeRecursively_data();
void removeRecursively();
void removeRecursivelyFailure();
+ void removeRecursivelySymlink();
void exists_data();
void exists();
@@ -412,6 +413,31 @@ void tst_QDir::removeRecursivelyFailure()
QVERIFY(!dir.exists());
}
+void tst_QDir::removeRecursivelySymlink()
+{
+#ifndef Q_NO_SYMLINKS
+ const QString tmpdir = QDir::currentPath() + "/tmpdir/";
+ QDir().mkpath(tmpdir);
+ QDir currentDir;
+ currentDir.mkdir("myDir");
+ QFile("testfile").open(QIODevice::WriteOnly);
+ const QString link = tmpdir + "linkToDir.lnk";
+ const QString linkToFile = tmpdir + "linkToFile.lnk";
+#ifndef Q_NO_SYMLINKS_TO_DIRS
+ QVERIFY(QFile::link("../myDir", link));
+ QVERIFY(QFile::link("../testfile", linkToFile));
+#endif
+
+ QDir dir(tmpdir);
+ QVERIFY(dir.removeRecursively());
+ QVERIFY(QDir("myDir").exists()); // it didn't follow the symlink, good.
+ QVERIFY(QFile::exists("testfile"));
+
+ currentDir.rmdir("myDir");
+ QFile::remove("testfile");
+#endif
+}
+
void tst_QDir::exists_data()
{
QTest::addColumn<QString>("path");