Fix memory leaks when reading thumbnails

svn-id: r45142
This commit is contained in:
Robert Špalek 2009-10-16 00:09:20 +00:00
parent 1dfc808aad
commit b2bf21f0da
2 changed files with 12 additions and 6 deletions

View file

@ -146,10 +146,10 @@ SaveStateList DraciMetaEngine::listSaves(const char *target) const {
if (Draci::readSavegameHeader(in, header)) { if (Draci::readSavegameHeader(in, header)) {
saveList.push_back(SaveStateDescriptor(slotNum, header.saveName)); saveList.push_back(SaveStateDescriptor(slotNum, header.saveName));
if (header.thumbnail) { if (header.thumbnail) {
header.thumbnail->free(); header.thumbnail->free();
delete header.thumbnail; delete header.thumbnail;
} }
} }
delete in; delete in;
} }
} }

View file

@ -62,6 +62,7 @@ bool readSavegameHeader(Common::InSaveFile *in, DraciSavegameHeader &header) {
// Get the thumbnail // Get the thumbnail
header.thumbnail = new Graphics::Surface(); header.thumbnail = new Graphics::Surface();
if (!Graphics::loadThumbnail(*in, *header.thumbnail)) { if (!Graphics::loadThumbnail(*in, *header.thumbnail)) {
header.thumbnail->free();
delete header.thumbnail; delete header.thumbnail;
header.thumbnail = NULL; header.thumbnail = NULL;
return false; return false;
@ -131,8 +132,13 @@ Common::Error loadSavegameData(int saveGameIdx, DraciEngine *vm) {
// Skip over the savegame header // Skip over the savegame header
DraciSavegameHeader header; DraciSavegameHeader header;
readSavegameHeader(f, header); if (!readSavegameHeader(f, header)) {
if (header.thumbnail) delete header.thumbnail; return Common::kNoGameDataFoundError;
}
if (header.thumbnail) {
header.thumbnail->free();
delete header.thumbnail;
}
// Pre-processing // Pre-processing
vm->_game->rememberRoomNumAsPrevious(); vm->_game->rememberRoomNumAsPrevious();