diff options
author | Julien Templier | 2010-11-11 03:25:35 +0000 |
---|---|---|
committer | Julien Templier | 2010-11-11 03:25:35 +0000 |
commit | 3b66e53bbed7365607bb3804b990984646ad2376 (patch) | |
tree | 37c619c30694495a839b7e74a5ec3b4c452dd09b /engines/lastexpress/game | |
parent | d1bd2497a584c415681bdc952b2fd430aeeb5e03 (diff) | |
download | scummvm-rg350-3b66e53bbed7365607bb3804b990984646ad2376.tar.gz scummvm-rg350-3b66e53bbed7365607bb3804b990984646ad2376.tar.bz2 scummvm-rg350-3b66e53bbed7365607bb3804b990984646ad2376.zip |
LASTEXPRESS: Fix some memory leaks
- Reading past the end of file in SaveLoad::init
- Missing deallocation of cache in SoundManager
- Missing deallocation of coords in SceneHotspot
- Missing deallocation of event handlers in LastExpressEngine::setEventHandlers
- Missing deallocation of InSaveFile in SaveLoad::isSavegameValid
- Missing deallocation of frames in Menu
as reported by digitall
svn-id: r54193
Diffstat (limited to 'engines/lastexpress/game')
-rw-r--r-- | engines/lastexpress/game/menu.cpp | 6 | ||||
-rw-r--r-- | engines/lastexpress/game/savegame.cpp | 7 | ||||
-rw-r--r-- | engines/lastexpress/game/sound.cpp | 2 |
3 files changed, 13 insertions, 2 deletions
diff --git a/engines/lastexpress/game/menu.cpp b/engines/lastexpress/game/menu.cpp index f6840c28a7..6ca4f22177 100644 --- a/engines/lastexpress/game/menu.cpp +++ b/engines/lastexpress/game/menu.cpp @@ -383,6 +383,12 @@ Menu::~Menu() { _lastHotspot = NULL; + // Cleanup frames + for (MenuFrames::iterator it = _frames.begin(); it != _frames.end(); it++) + SAFE_DELETE(it->_value); + + _frames.clear(); + // Zero passed pointers _engine = NULL; } diff --git a/engines/lastexpress/game/savegame.cpp b/engines/lastexpress/game/savegame.cpp index 224d91eddd..f5b512f5ee 100644 --- a/engines/lastexpress/game/savegame.cpp +++ b/engines/lastexpress/game/savegame.cpp @@ -124,7 +124,7 @@ uint32 SaveLoad::init(GameId id, bool resetHeaders) { // Read the list of entry headers if (_savegame->size() > 32) { - while (!_savegame->eos() && !_savegame->err()) { + while (_savegame->pos() < _savegame->size() && !_savegame->eos() && !_savegame->err()) { // Update sound queue while we go through the savegame getSound()->updateQueue(); @@ -485,7 +485,10 @@ bool SaveLoad::isSavegameValid(GameId id) { SavegameMainHeader header; Common::InSaveFile *save = openForLoading(id); - return loadMainHeader(save, &header); + bool isHeaderValid = loadMainHeader(save, &header); + delete save; + + return isHeaderValid; } bool SaveLoad::isGameFinished(uint32 menuIndex, uint32 savegameIndex) { diff --git a/engines/lastexpress/game/sound.cpp b/engines/lastexpress/game/sound.cpp index 0dfc38b1b0..2249109fe9 100644 --- a/engines/lastexpress/game/sound.cpp +++ b/engines/lastexpress/game/sound.cpp @@ -118,6 +118,8 @@ SoundManager::SoundManager(LastExpressEngine *engine) : _engine(engine), _state( } SoundManager::~SoundManager() { + _cache.clear(); + delete _soundStream; // Zero passed pointers |