mirror of
https://github.com/vcmi/vcmi.git
synced 2024-12-24 22:14:36 +02:00
Launcher: add sanity checks for QDir::removeRecursively. Issue 2673
I'm not always fail to uninstall mod, but when I do I remove $HOME Bumblebee developers should be proud of us...
This commit is contained in:
parent
bdb0db819d
commit
5d8e943787
@ -245,7 +245,7 @@ bool CModManager::doInstallMod(QString modname, QString archivePath)
|
|||||||
|
|
||||||
if (!ZipArchive::extract(qstringToPath(archivePath), qstringToPath(destDir)))
|
if (!ZipArchive::extract(qstringToPath(archivePath), qstringToPath(destDir)))
|
||||||
{
|
{
|
||||||
QDir(destDir + modDirName).removeRecursively();
|
removeModDir(destDir + modDirName);
|
||||||
return addError(modname, "Failed to extract mod data");
|
return addError(modname, "Failed to extract mod data");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -270,7 +270,7 @@ bool CModManager::doUninstallMod(QString modname)
|
|||||||
if (!localMods.contains(modname))
|
if (!localMods.contains(modname))
|
||||||
return addError(modname, "Data with this mod was not found");
|
return addError(modname, "Data with this mod was not found");
|
||||||
|
|
||||||
if (!QDir(modDir).removeRecursively())
|
if (!removeModDir(modDir))
|
||||||
return addError(modname, "Failed to delete mod data");
|
return addError(modname, "Failed to delete mod data");
|
||||||
|
|
||||||
localMods.remove(modname);
|
localMods.remove(modname);
|
||||||
@ -279,3 +279,21 @@ bool CModManager::doUninstallMod(QString modname)
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CModManager::removeModDir(QString path)
|
||||||
|
{
|
||||||
|
// issues 2673 and 2680 its why you do not recursively remove without sanity check
|
||||||
|
QDir checkDir(path);
|
||||||
|
if(!checkDir.cdUp() || QString::compare("Mods", checkDir.dirName(), Qt::CaseInsensitive))
|
||||||
|
return false;
|
||||||
|
if(!checkDir.cdUp() || QString::compare("vcmi", checkDir.dirName(), Qt::CaseInsensitive))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
QDir dir(path);
|
||||||
|
if(!dir.absolutePath().contains("vcmi", Qt::CaseInsensitive))
|
||||||
|
return false;
|
||||||
|
if(!dir.absolutePath().contains("Mods", Qt::CaseInsensitive))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return dir.removeRecursively();
|
||||||
|
}
|
||||||
|
@ -18,6 +18,7 @@ class CModManager
|
|||||||
|
|
||||||
QStringList recentErrors;
|
QStringList recentErrors;
|
||||||
bool addError(QString modname, QString message);
|
bool addError(QString modname, QString message);
|
||||||
|
bool removeModDir(QString mod);
|
||||||
public:
|
public:
|
||||||
CModManager(CModList * modList);
|
CModManager(CModList * modList);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user