TINSEL: Use SAVEGAME_ID when getting savegame info, if a VM is instantiated

This commit is contained in:
Filippos Karapetis 2011-08-07 15:08:14 +03:00
parent 23a0f5318c
commit 5974fcd0c1

View file

@ -154,16 +154,15 @@ static bool syncSaveGameHeader(Common::Serializer &s, SaveGameHeader &hdr) {
syncTime(s, hdr.dateTime);
int tmp = hdr.size - s.bytesSynced();
// NOTE: We can't use SAVEGAME_ID here when attempting to remove a saved game from the launcher,
// as there is no TinselEngine initialized then. This means that we can't check if this is a DW1
// or DW2 savegame in this case, but it doesn't really matter, as the saved game is about to be
// deleted anyway. Refer to bug #3387551.
bool correctID = _vm ? (hdr.id == SAVEGAME_ID) : (hdr.id == DW1_SAVEGAME_ID || hdr.id == DW2_SAVEGAME_ID);
// Perform sanity check
if (tmp < 0 ||
// NOTE: We can't use SAVEGAME_ID here, as this function is called by the launcher
// when deleting saved games. SAVEGAME_ID calls TinselEngine::getVersion(), and
// TinselEngine isn't initialized then. Therefore, we use the two DW savegame
// IDs instead, which means that this sanity check won't detect badly named DW1/DW2
// saved games (i.e. a DW2 saved game named "dw.xxx"). Refer to bug #3387551.
/*hdr.id != SAVEGAME_ID ||*/
(hdr.id != DW1_SAVEGAME_ID && hdr.id != DW2_SAVEGAME_ID) ||
hdr.ver > CURRENT_VER || hdr.size > 1024)
if (tmp < 0 || !correctID || hdr.ver > CURRENT_VER || hdr.size > 1024)
return false;
// Skip over any extra bytes
s.skip(tmp);