aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/utils/fileutils.cpp
diff options
context:
space:
mode:
authorChristian Kandeler <[email protected]>2011-07-21 14:49:16 +0200
committerChristian Kandeler <[email protected]>2011-07-22 11:15:23 +0200
commit164cd970e574d21e0a74bdf406950e4e032ca34d (patch)
treeda9b7494a03abf570ffeb9c94d2fe29725d8cb30 /src/libs/utils/fileutils.cpp
parent1095ad58614ccafad45c321cb9b802c73cd1699c (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.cpp19
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));