[Scummvm-cvs-logs] SF.net SVN: scummvm:[54193] scummvm/trunk/engines/lastexpress

littleboy at users.sourceforge.net littleboy at users.sourceforge.net
Thu Nov 11 04:25:35 CET 2010


Revision: 54193
          http://scummvm.svn.sourceforge.net/scummvm/?rev=54193&view=rev
Author:   littleboy
Date:     2010-11-11 03:25:35 +0000 (Thu, 11 Nov 2010)

Log Message:
-----------
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

Modified Paths:
--------------
    scummvm/trunk/engines/lastexpress/data/scene.cpp
    scummvm/trunk/engines/lastexpress/data/scene.h
    scummvm/trunk/engines/lastexpress/game/menu.cpp
    scummvm/trunk/engines/lastexpress/game/savegame.cpp
    scummvm/trunk/engines/lastexpress/game/sound.cpp
    scummvm/trunk/engines/lastexpress/lastexpress.cpp

Modified: scummvm/trunk/engines/lastexpress/data/scene.cpp
===================================================================
--- scummvm/trunk/engines/lastexpress/data/scene.cpp	2010-11-11 02:08:17 UTC (rev 54192)
+++ scummvm/trunk/engines/lastexpress/data/scene.cpp	2010-11-11 03:25:35 UTC (rev 54193)
@@ -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();
 

Modified: scummvm/trunk/engines/lastexpress/data/scene.h
===================================================================
--- scummvm/trunk/engines/lastexpress/data/scene.h	2010-11-11 02:08:17 UTC (rev 54192)
+++ scummvm/trunk/engines/lastexpress/data/scene.h	2010-11-11 03:25:35 UTC (rev 54193)
@@ -151,6 +151,7 @@
 	uint32 next;
 
 	SceneHotspot() {}
+	~SceneHotspot();
 	static SceneHotspot *load(Common::SeekableReadStream *stream);
 
 	bool isInside(const Common::Point &point);

Modified: scummvm/trunk/engines/lastexpress/game/menu.cpp
===================================================================
--- scummvm/trunk/engines/lastexpress/game/menu.cpp	2010-11-11 02:08:17 UTC (rev 54192)
+++ scummvm/trunk/engines/lastexpress/game/menu.cpp	2010-11-11 03:25:35 UTC (rev 54193)
@@ -383,6 +383,12 @@
 
 	_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;
 }

Modified: scummvm/trunk/engines/lastexpress/game/savegame.cpp
===================================================================
--- scummvm/trunk/engines/lastexpress/game/savegame.cpp	2010-11-11 02:08:17 UTC (rev 54192)
+++ scummvm/trunk/engines/lastexpress/game/savegame.cpp	2010-11-11 03:25:35 UTC (rev 54193)
@@ -124,7 +124,7 @@
 
 	// 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 @@
 	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) {

Modified: scummvm/trunk/engines/lastexpress/game/sound.cpp
===================================================================
--- scummvm/trunk/engines/lastexpress/game/sound.cpp	2010-11-11 02:08:17 UTC (rev 54192)
+++ scummvm/trunk/engines/lastexpress/game/sound.cpp	2010-11-11 03:25:35 UTC (rev 54193)
@@ -118,6 +118,8 @@
 }
 
 SoundManager::~SoundManager() {
+	_cache.clear();
+
 	delete _soundStream;
 
 	// Zero passed pointers

Modified: scummvm/trunk/engines/lastexpress/lastexpress.cpp
===================================================================
--- scummvm/trunk/engines/lastexpress/lastexpress.cpp	2010-11-11 02:08:17 UTC (rev 54192)
+++ scummvm/trunk/engines/lastexpress/lastexpress.cpp	2010-11-11 03:25:35 UTC (rev 54193)
@@ -292,6 +292,10 @@
 }
 
 void LastExpressEngine::setEventHandlers(EventHandler::EventFunction *mouse, EventHandler::EventFunction *tick) {
+	// Cleanup previous event handlers
+	delete eventMouse;
+	delete eventTick;
+
 	eventMouse = mouse;
 	eventTick = tick;
 }


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list