aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorJulien Templier2010-11-11 03:25:35 +0000
committerJulien Templier2010-11-11 03:25:35 +0000
commit3b66e53bbed7365607bb3804b990984646ad2376 (patch)
tree37c619c30694495a839b7e74a5ec3b4c452dd09b /engines
parentd1bd2497a584c415681bdc952b2fd430aeeb5e03 (diff)
downloadscummvm-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')
-rw-r--r--engines/lastexpress/data/scene.cpp8
-rw-r--r--engines/lastexpress/data/scene.h1
-rw-r--r--engines/lastexpress/game/menu.cpp6
-rw-r--r--engines/lastexpress/game/savegame.cpp7
-rw-r--r--engines/lastexpress/game/sound.cpp2
-rw-r--r--engines/lastexpress/lastexpress.cpp4
6 files changed, 26 insertions, 2 deletions
diff --git a/engines/lastexpress/data/scene.cpp b/engines/lastexpress/data/scene.cpp
index 8e90d93828..47266358f2 100644
--- a/engines/lastexpress/data/scene.cpp
+++ b/engines/lastexpress/data/scene.cpp
@@ -27,11 +27,19 @@
#include "lastexpress/data/background.h"
+#include "lastexpress/helpers.h"
#include "lastexpress/lastexpress.h"
#include "lastexpress/resource.h"
namespace LastExpress {
+SceneHotspot::~SceneHotspot() {
+ for (uint i = 0; i < _coords.size(); i++)
+ SAFE_DELETE(_coords[i]);
+
+ _coords.clear();
+}
+
SceneHotspot *SceneHotspot::load(Common::SeekableReadStream *stream) {
SceneHotspot *hs = new SceneHotspot();
diff --git a/engines/lastexpress/data/scene.h b/engines/lastexpress/data/scene.h
index c4a34e127b..d4c8e7d0da 100644
--- a/engines/lastexpress/data/scene.h
+++ b/engines/lastexpress/data/scene.h
@@ -151,6 +151,7 @@ public:
uint32 next;
SceneHotspot() {}
+ ~SceneHotspot();
static SceneHotspot *load(Common::SeekableReadStream *stream);
bool isInside(const Common::Point &point);
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
diff --git a/engines/lastexpress/lastexpress.cpp b/engines/lastexpress/lastexpress.cpp
index 2ccdc14fbd..b2809a2b99 100644
--- a/engines/lastexpress/lastexpress.cpp
+++ b/engines/lastexpress/lastexpress.cpp
@@ -292,6 +292,10 @@ void LastExpressEngine::restoreEventHandlers() {
}
void LastExpressEngine::setEventHandlers(EventHandler::EventFunction *mouse, EventHandler::EventFunction *tick) {
+ // Cleanup previous event handlers
+ delete eventMouse;
+ delete eventTick;
+
eventMouse = mouse;
eventTick = tick;
}