From 0a7109126051fa13e6f2e27845897792a2ba24cb Mon Sep 17 00:00:00 2001
From: Orgad Shaneh <orgad.shaneh@audiocodes.com>
Date: Tue, 3 Dec 2013 08:15:44 +0200
Subject: [PATCH] Limit cdUp to root

Task-number: QTCREATORBUG-10860

Change-Id: I22550b4415e07cac0d78f36595dc7ee781a837c0
Reviewed-by: Eike Ziller <eike.ziller@digia.com>
---
 src/plugins/clearcase/clearcaseplugin.cpp   | 2 +-
 src/plugins/cvs/cvsplugin.cpp               | 4 +++-
 src/plugins/git/gitclient.cpp               | 2 +-
 src/plugins/qtsupport/baseqtversion.cpp     | 2 +-
 src/plugins/subversion/subversionplugin.cpp | 6 ++++--
 src/plugins/vcsbase/vcsbaseplugin.cpp       | 2 +-
 6 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/src/plugins/clearcase/clearcaseplugin.cpp b/src/plugins/clearcase/clearcaseplugin.cpp
index e36b644f02c..dd78679704d 100644
--- a/src/plugins/clearcase/clearcaseplugin.cpp
+++ b/src/plugins/clearcase/clearcaseplugin.cpp
@@ -230,7 +230,7 @@ QString ClearCasePlugin::getDriveLetterOfPath(const QString &directory)
 {
     // cdUp until we get just the drive letter
     QDir dir(directory);
-    while (dir.cdUp())
+    while (!dir.isRoot() && dir.cdUp())
     { }
 
     return dir.path();
diff --git a/src/plugins/cvs/cvsplugin.cpp b/src/plugins/cvs/cvsplugin.cpp
index 9d4a8055f74..15826ba473c 100644
--- a/src/plugins/cvs/cvsplugin.cpp
+++ b/src/plugins/cvs/cvsplugin.cpp
@@ -1349,7 +1349,9 @@ bool CvsPlugin::managesDirectory(const QString &directory, QString *topLevel /*
          * not have a  "CVS" directory. The starting directory must be a managed
          * one. Go up and try to find the first unmanaged parent dir. */
         QDir lastDirectory = dir;
-        for (QDir parentDir = lastDirectory; parentDir.cdUp() ; lastDirectory = parentDir) {
+        for (QDir parentDir = lastDirectory;
+             !parentDir.isRoot() && parentDir.cdUp();
+             lastDirectory = parentDir) {
             if (!checkCVSDirectory(parentDir)) {
                 *topLevel = lastDirectory.absolutePath();
                 break;
diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index 22d8076a3c0..b6a1d9045ac 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -977,7 +977,7 @@ QString GitClient::findRepositoryForDirectory(const QString &dir)
             else if (directory.exists(QLatin1String(".git/config")))
                 return directory.absolutePath();
         }
-    } while (directory.cdUp());
+    } while (!directory.isRoot() && directory.cdUp());
     return QString();
 }
 
diff --git a/src/plugins/qtsupport/baseqtversion.cpp b/src/plugins/qtsupport/baseqtversion.cpp
index 451d4dcb925..e6566930097 100644
--- a/src/plugins/qtsupport/baseqtversion.cpp
+++ b/src/plugins/qtsupport/baseqtversion.cpp
@@ -218,7 +218,7 @@ QString BaseQtVersion::defaultDisplayName(const QString &versionString, const Fi
                 && dirName.compare(QLatin1String("qt"), Qt::CaseInsensitive)) {
                 break;
             }
-        } while (dir.cdUp());
+        } while (!dir.isRoot() && dir.cdUp());
     }
 
     return fromPath ?
diff --git a/src/plugins/subversion/subversionplugin.cpp b/src/plugins/subversion/subversionplugin.cpp
index de57be400e1..84d107cb6ea 100644
--- a/src/plugins/subversion/subversionplugin.cpp
+++ b/src/plugins/subversion/subversionplugin.cpp
@@ -1328,7 +1328,7 @@ bool SubversionPlugin::managesDirectory(const QString &directory, QString *topLe
      * furthest parent containing ".svn/wc.db". Need to check for furthest parent as closer
      * parents may be svn:externals. */
     QDir parentDir = dir;
-    while (parentDir.cdUp()) {
+    while (!parentDir.isRoot() && parentDir.cdUp()) {
         if (checkSVNSubDir(parentDir, QLatin1String("wc.db"))) {
             if (topLevel)
                 *topLevel = parentDir.absolutePath();
@@ -1344,7 +1344,9 @@ bool SubversionPlugin::managesDirectory(const QString &directory, QString *topLe
 
      if (topLevel) {
          QDir lastDirectory = dir;
-         for (parentDir = lastDirectory; parentDir.cdUp() ; lastDirectory = parentDir) {
+         for (parentDir = lastDirectory;
+              !parentDir.isRoot() && parentDir.cdUp();
+              lastDirectory = parentDir) {
              if (!checkSVNSubDir(parentDir)) {
                  *topLevel = lastDirectory.absolutePath();
                  break;
diff --git a/src/plugins/vcsbase/vcsbaseplugin.cpp b/src/plugins/vcsbase/vcsbaseplugin.cpp
index 395de4e2383..fc73d89c677 100644
--- a/src/plugins/vcsbase/vcsbaseplugin.cpp
+++ b/src/plugins/vcsbase/vcsbaseplugin.cpp
@@ -732,7 +732,7 @@ QString VcsBasePlugin::findRepositoryForDirectory(const QString &dirS,
                 qDebug() << "<VcsBasePlugin::findRepositoryForDirectory> " << absDirPath;
             return absDirPath;
         }
-    } while (directory.cdUp());
+    } while (!directory.isRoot() && directory.cdUp());
     if (debugRepositorySearch)
         qDebug() << "<VcsBasePlugin::findRepositoryForDirectory bailing out at " << directory.absolutePath();
     return QString();
-- 
GitLab