diff options
Diffstat (limited to 'engines/mortevielle/saveload.cpp')
-rw-r--r-- | engines/mortevielle/saveload.cpp | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/engines/mortevielle/saveload.cpp b/engines/mortevielle/saveload.cpp index 3032c96690..078338a0b5 100644 --- a/engines/mortevielle/saveload.cpp +++ b/engines/mortevielle/saveload.cpp @@ -92,8 +92,10 @@ bool SavegameManager::loadSavegame(const Common::String &filename) { if (!strncmp(&buffer[0], &SAVEGAME_ID[0], 4)) { // Yes, it is, so skip over the savegame header SavegameHeader header; - readSavegameHeader(stream, header); - delete header.thumbnail; + if (!readSavegameHeader(stream, header)) { + delete stream; + return false; + } } else { stream->seek(0); } @@ -208,9 +210,7 @@ void SavegameManager::writeSavegameHeader(Common::OutSaveFile *out, const Common out->writeSint16LE(td.tm_min); } -bool SavegameManager::readSavegameHeader(Common::InSaveFile *in, SavegameHeader &header) { - header.thumbnail = NULL; - +WARN_UNUSED_RESULT bool SavegameManager::readSavegameHeader(Common::InSaveFile *in, SavegameHeader &header, bool skipThumbnail) { // Get the savegame version header.version = in->readByte(); @@ -221,9 +221,9 @@ bool SavegameManager::readSavegameHeader(Common::InSaveFile *in, SavegameHeader header.saveName += ch; // Get the thumbnail - header.thumbnail = Graphics::loadThumbnail(*in); - if (!header.thumbnail) + if (!Graphics::loadThumbnail(*in, header.thumbnail, skipThumbnail)) { return false; + } // Read in save date/time header.saveYear = in->readSint16LE(); @@ -263,7 +263,6 @@ SaveStateList SavegameManager::listSaves(const Common::String &target) { validFlag = readSavegameHeader(in, header); if (validFlag) { - delete header.thumbnail; saveDescription = header.saveName; } } else if (file->size() == 497) { @@ -311,7 +310,10 @@ SaveStateDescriptor SavegameManager::querySaveMetaInfos(const Common::String &fi } else { // Get the savegame header information SavegameHeader header; - readSavegameHeader(f, header); + if (!readSavegameHeader(f, header, false)) { + delete f; + return SaveStateDescriptor(); + } delete f; // Create the return descriptor |