From f61b8fd6a3f9470373023bf30b97eb0eb7aaaf2c Mon Sep 17 00:00:00 2001
From: Tobias Hunger <tobias.hunger@nokia.com>
Date: Fri, 8 Apr 2011 17:33:14 +0200
Subject: [PATCH] VCS: Fix crash in VCSManager

---
 src/plugins/coreplugin/vcsmanager.cpp | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/plugins/coreplugin/vcsmanager.cpp b/src/plugins/coreplugin/vcsmanager.cpp
index c99bd695833..b68f5bb1e51 100644
--- a/src/plugins/coreplugin/vcsmanager.cpp
+++ b/src/plugins/coreplugin/vcsmanager.cpp
@@ -127,7 +127,7 @@ public:
             m_vcsInfoList.append(newInfo);
 
         QString tmpDir = directory;
-        while (tmpDir.count() >= topLevel.count()) {
+        while (tmpDir.count() >= topLevel.count() && tmpDir.count() > 0) {
             m_cachedMatches.insert(tmpDir, newInfo);
             int slashPos = tmpDir.lastIndexOf(SLASH);
             tmpDir = slashPos >= 0 ? tmpDir.left(tmpDir.lastIndexOf(SLASH)) : QString();
@@ -174,7 +174,7 @@ IVersionControl* VcsManager::findVersionControlForDirectory(const QString &direc
     if (directory.isEmpty())
         return 0;
 
-    VcsManagerPrivate::VcsInfo * cachedData = m_d->findUpInCache(directory);
+    VcsManagerPrivate::VcsInfo *cachedData = m_d->findInCache(directory);
     if (cachedData) {
         if (topLevelDirectory)
             *topLevelDirectory = cachedData->topLevel;
@@ -186,7 +186,7 @@ IVersionControl* VcsManager::findVersionControlForDirectory(const QString &direc
     QList<QPair<QString, IVersionControl *> > allThatCanManage;
 
     foreach (IVersionControl * versionControl, versionControls) {
-        QString topLevel = cachedData ? cachedData->topLevel : QString();
+        QString topLevel;
         if (versionControl->managesDirectory(directory, &topLevel))
             allThatCanManage.push_back(qMakePair(topLevel, versionControl));
     }
@@ -196,7 +196,7 @@ IVersionControl* VcsManager::findVersionControlForDirectory(const QString &direc
     qSort(allThatCanManage.begin(), allThatCanManage.end(), longerThanPath);
 
     if (allThatCanManage.isEmpty()) {
-        m_d->cache(0, cachedData->topLevel, directory); // register that nothing was found!
+        m_d->cache(0, QString(), directory); // register that nothing was found!
 
         // report result;
         if (topLevelDirectory)
-- 
GitLab