1
0
forked from 0ad/0ad

Fix duplicate insertion error when detecting incompatible mods.

Since f1acd22455, mods are checked for compatibility. However, they can
incorrectly be checked & added to inompatible mods several time, leading
to a potential crash.

The new code can also be simplified slightly.

Reviewed By: Angen
Differential Revision: https://code.wildfiregames.com/D4276
This was SVN commit r25926.
This commit is contained in:
wraitii 2021-09-17 16:59:03 +00:00
parent ca4ee134fc
commit dfeb29b82c
2 changed files with 6 additions and 10 deletions

View File

@ -324,17 +324,9 @@ std::vector<CStr> Mod::CheckForIncompatibleMods(const std::vector<CStr>& mods) c
//0.0.24
const CStr versionToCheck = dep.substr(pos + op.size());
const std::unordered_map<CStr, CStr>::iterator it = modNameVersions.find(modToCheck);
if (it == modNameVersions.end())
{
// Could not find the mod, or 0.0.25(0ad) , <=, 0.0.24(required version)
if (it == modNameVersions.end() || !CompareVersionStrings(it->second, op, versionToCheck))
incompatibleMods.push_back(mod);
continue;
}
// 0.0.25(0ad) , <=, 0.0.24(required version)
if (!CompareVersionStrings(it->second, op, versionToCheck))
{
incompatibleMods.push_back(mod);
continue;
}
break;
}
}

View File

@ -128,6 +128,10 @@ public:
mods.push_back("public");
mods.push_back("does_not_exist");
TS_ASSERT(!m_Mods.CheckForIncompatibleMods(mods).empty());
mods.clear();
mods.push_back("good2");
TS_ASSERT(m_Mods.CheckForIncompatibleMods(mods).size() == 1);
}
void test_play_compatible()