diff options
author | Walter van Niftrik | 2010-06-04 10:36:49 +0000 |
---|---|---|
committer | Walter van Niftrik | 2010-06-04 10:36:49 +0000 |
commit | a8acf7468c8f795355bb85962052eb8c02e2a4de (patch) | |
tree | f8514b02fd9bdb9e50d713c7e1a4137024ea0067 | |
parent | f1a55a9c67886209e69900159c7917dfedc1d79f (diff) | |
download | scummvm-rg350-a8acf7468c8f795355bb85962052eb8c02e2a4de.tar.gz scummvm-rg350-a8acf7468c8f795355bb85962052eb8c02e2a4de.tar.bz2 scummvm-rg350-a8acf7468c8f795355bb85962052eb8c02e2a4de.zip |
SCI: Add savegame version check in CheckSaveGame
svn-id: r49424
-rw-r--r-- | engines/sci/engine/kfile.cpp | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/engines/sci/engine/kfile.cpp b/engines/sci/engine/kfile.cpp index ce501bab47..4be92015ab 100644 --- a/engines/sci/engine/kfile.cpp +++ b/engines/sci/engine/kfile.cpp @@ -44,6 +44,7 @@ struct SavegameDesc { int id; int date; int time; + int version; char name[SCI_MAX_SAVENAME_LENGTH]; }; @@ -276,6 +277,7 @@ void listSavegames(Common::Array<SavegameDesc> &saves) { // We need to fix date in here, because we save DDMMYYYY instead of YYYYMMDD, so sorting wouldnt work desc.date = ((desc.date & 0xFFFF) << 16) | ((desc.date & 0xFF0000) >> 8) | ((desc.date & 0xFF000000) >> 24); desc.time = meta.savegame_time; + desc.version = meta.savegame_version; if (meta.savegame_name.lastChar() == '\n') meta.savegame_name.deleteLastChar(); @@ -444,7 +446,17 @@ reg_t kCheckSaveGame(EngineState *s, int argc, reg_t *argv) { Common::Array<SavegameDesc> saves; listSavegames(saves); - return make_reg(0, savedir_nr < saves.size()); + // Check for savegame slot being out of range + if (savedir_nr >= saves.size()) + return NULL_REG; + + // Check for compatible savegame version + int ver = saves[savedir_nr].version; + if (ver < MINIMUM_SAVEGAME_VERSION || ver > CURRENT_SAVEGAME_VERSION) + return NULL_REG; + + // Otherwise we assume the savegame is OK + return make_reg(0, 1); } reg_t kGetSaveFiles(EngineState *s, int argc, reg_t *argv) { |