diff options
author | Christian Kandeler <[email protected]> | 2011-07-21 14:49:16 +0200 |
---|---|---|
committer | Christian Kandeler <[email protected]> | 2011-07-22 11:15:23 +0200 |
commit | 164cd970e574d21e0a74bdf406950e4e032ca34d (patch) | |
tree | da9b7494a03abf570ffeb9c94d2fe29725d8cb30 /src/libs/utils/fileutils.cpp | |
parent | 1095ad58614ccafad45c321cb9b802c73cd1699c (diff) |
FileUtils: Add some safety checks to removeRecursively().
Change-Id: I657f8416081ce7d253f4a3ef9722a39ac34b5f24
Reviewed-on: http://codereview.qt.nokia.com/1955
Reviewed-by: Qt Sanity Bot <[email protected]>
Reviewed-by: Eike Ziller <[email protected]>
Diffstat (limited to 'src/libs/utils/fileutils.cpp')
-rw-r--r-- | src/libs/utils/fileutils.cpp | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/src/libs/utils/fileutils.cpp b/src/libs/utils/fileutils.cpp index b4eb010a4ae..407b96abb67 100644 --- a/src/libs/utils/fileutils.cpp +++ b/src/libs/utils/fileutils.cpp @@ -100,14 +100,29 @@ bool FileUtils::removeRecursively(const QString &filePath, QString *error) QFile::setPermissions(filePath, fileInfo.permissions() | QFile::WriteUser); if (fileInfo.isDir()) { QDir dir(filePath); + dir = dir.canonicalPath(); + if (dir.isRoot()) { + if (error) { + *error = QCoreApplication::translate("Utils::FileUtils", + "Refusing to remove root directory."); + } + return false; + } + if (dir.path() == QDir::home().canonicalPath()) { + if (error) { + *error = QCoreApplication::translate("Utils::FileUtils", + "Refusing to remove your home directory."); + } + return false; + } + QStringList fileNames = dir.entryList(QDir::Files | QDir::Hidden | QDir::System | QDir::Dirs | QDir::NoDotAndDotDot); foreach (const QString &fileName, fileNames) { if (!removeRecursively(filePath + QLatin1Char('/') + fileName, error)) return false; } - dir.cdUp(); - if (!dir.rmdir(fileInfo.fileName())) { + if (!QDir::root().rmdir(dir.path())) { if (error) { *error = QCoreApplication::translate("Utils::FileUtils", "Failed to remove directory '%1'.") .arg(QDir::toNativeSeparators(filePath)); |