diff options
author | David Faure <faure@kde.org> | 2011-12-19 20:44:45 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-12-19 20:48:16 +0100 |
commit | 8707c09fcddb3d335ba79394f266a88129ba5ba2 (patch) | |
tree | dc98ae91da9ba970c222f4bc12da78a9ae526f95 /tests/auto/corelib/io/qdir | |
parent | 0443a51228e87499470536d570284a4bbab85d0f (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.cpp | 26 |
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"); |