From 2c9fdf0df754176a375d5079c7e8578c6701630a Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Sun, 7 Aug 2011 14:21:28 +0300 Subject: TINSEL: Fixed deleting saved games from the launcher (bug #3387551) --- engines/tinsel/saveload.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'engines/tinsel/saveload.cpp') diff --git a/engines/tinsel/saveload.cpp b/engines/tinsel/saveload.cpp index 7a973ba4be..983259d515 100644 --- a/engines/tinsel/saveload.cpp +++ b/engines/tinsel/saveload.cpp @@ -155,7 +155,15 @@ static bool syncSaveGameHeader(Common::Serializer &s, SaveGameHeader &hdr) { int tmp = hdr.size - s.bytesSynced(); // Perform sanity check - if (tmp < 0 || hdr.id != SAVEGAME_ID || hdr.ver > CURRENT_VER || hdr.size > 1024) + 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) return false; // Skip over any extra bytes s.skip(tmp); -- cgit v1.2.3 From 5974fcd0c1cac3f57700a9efcd7899e8f89ef3e5 Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Sun, 7 Aug 2011 15:08:14 +0300 Subject: TINSEL: Use SAVEGAME_ID when getting savegame info, if a VM is instantiated --- engines/tinsel/saveload.cpp | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) (limited to 'engines/tinsel/saveload.cpp') diff --git a/engines/tinsel/saveload.cpp b/engines/tinsel/saveload.cpp index 983259d515..4ac172be43 100644 --- a/engines/tinsel/saveload.cpp +++ b/engines/tinsel/saveload.cpp @@ -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); -- cgit v1.2.3