[Scummvm-cvs-logs] scummvm master -> 22ebc2b724df5d8d717dec0d225e802d57514f79
digitall
digitall at scummvm.org
Tue Mar 1 08:38:36 CET 2011
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
22ebc2b724 HUGO: Correct 2 Memory Leaks in DAT Object Loading.
Commit: 22ebc2b724df5d8d717dec0d225e802d57514f79
https://github.com/scummvm/scummvm/commit/22ebc2b724df5d8d717dec0d225e802d57514f79
Author: D G Turner (digitall at scummvm.org)
Date: 2011-02-28T23:37:26-08:00
Commit Message:
HUGO: Correct 2 Memory Leaks in DAT Object Loading.
Changed paths:
engines/hugo/object.cpp
diff --git a/engines/hugo/object.cpp b/engines/hugo/object.cpp
index 04e3449..f82a6a5 100644
--- a/engines/hugo/object.cpp
+++ b/engines/hugo/object.cpp
@@ -418,20 +418,25 @@ void ObjectHandler::readUse(Common::ReadStream &in, uses_t &curUse) {
*/
void ObjectHandler::loadObjectUses(Common::ReadStream &in) {
uses_t tmpUse;
+ tmpUse.targets = 0;
+
//Read _uses
for (int varnt = 0; varnt < _vm->_numVariant; varnt++) {
- tmpUse.targets = 0;
uint16 numElem = in.readUint16BE();
if (varnt == _vm->_gameVariant) {
_usesSize = numElem;
_uses = (uses_t *)malloc(sizeof(uses_t) * numElem);
}
- for (int i = 0; i < numElem; i++)
- readUse(in, (varnt == _vm->_gameVariant) ? _uses[i] : tmpUse);
-
- if (tmpUse.targets)
- free(tmpUse.targets);
+ for (int i = 0; i < numElem; i++) {
+ if (varnt == _vm->_gameVariant)
+ readUse(in, _uses[i]);
+ else {
+ readUse(in, tmpUse);
+ free(tmpUse.targets);
+ tmpUse.targets = 0;
+ }
+ }
}
}
@@ -497,20 +502,26 @@ void ObjectHandler::readObject(Common::ReadStream &in, object_t &curObject) {
void ObjectHandler::loadObjectArr(Common::ReadStream &in) {
debugC(6, kDebugObject, "loadObject(&in)");
object_t tmpObject;
+ tmpObject.stateDataIndex = 0;
for (int varnt = 0; varnt < _vm->_numVariant; varnt++) {
uint16 numElem = in.readUint16BE();
- tmpObject.stateDataIndex = 0;
+
if (varnt == _vm->_gameVariant) {
_objCount = numElem;
_objects = (object_t *)malloc(sizeof(object_t) * numElem);
}
- for (int i = 0; i < numElem; i++)
- readObject(in, (varnt == _vm->_gameVariant) ? _objects[i] : tmpObject);
-
- if (tmpObject.stateDataIndex)
- free(tmpObject.stateDataIndex);
+ for (int i = 0; i < numElem; i++) {
+ if (varnt == _vm->_gameVariant)
+ readObject(in, _objects[i]);
+ else {
+ // Skip over uneeded objects.
+ readObject(in, tmpObject);
+ free(tmpObject.stateDataIndex);
+ tmpObject.stateDataIndex = 0;
+ }
+ }
}
}
More information about the Scummvm-git-logs
mailing list