[Scummvm-cvs-logs] SF.net SVN: scummvm: [28189] scummvm/trunk/engines/agos

Kirben at users.sourceforge.net Kirben at users.sourceforge.net
Wed Jul 25 13:29:47 CEST 2007


Revision: 28189
          http://scummvm.svn.sourceforge.net/scummvm/?rev=28189&view=rev
Author:   Kirben
Date:     2007-07-25 04:29:47 -0700 (Wed, 25 Jul 2007)

Log Message:
-----------
Add eriktorbjorn's patch for bug #1498158 - AOGS: Itemheap overflow on 64bit systems.

Modified Paths:
--------------
    scummvm/trunk/engines/agos/agos.cpp
    scummvm/trunk/engines/agos/agos.h
    scummvm/trunk/engines/agos/items.cpp

Modified: scummvm/trunk/engines/agos/agos.cpp
===================================================================
--- scummvm/trunk/engines/agos/agos.cpp	2007-07-25 04:52:12 UTC (rev 28188)
+++ scummvm/trunk/engines/agos/agos.cpp	2007-07-25 11:29:47 UTC (rev 28189)
@@ -148,10 +148,6 @@
 	_itemArraySize = 0;
 	_itemArrayInited = 0;
 
-	_itemHeapPtr = 0;
-	_itemHeapCurPos = 0;
-	_itemHeapSize = 0;
-
 	_iconFilePtr = 0;
 
 	_codePtr = 0;
@@ -920,7 +916,11 @@
 
 	_midi.close();
 
-	free(_itemHeapPtr - _itemHeapCurPos);
+	for (uint i = 0; i < _itemHeap.size(); i++) {
+		delete [] _itemHeap[i];
+	}
+	_itemHeap.clear();
+
 	free(_tablesHeapPtr - _tablesHeapCurPos);
 
 	free(_gameOffsetsPtr);
@@ -1054,7 +1054,11 @@
 
 	_midi.close();
 
-	free(_itemHeapPtr - _itemHeapCurPos);
+	for (uint i = 0; i < _itemHeap.size(); i++) {
+		delete [] _itemHeap[i];
+	}
+	_itemHeap.clear();
+
 	free(_tablesHeapPtr - _tablesHeapCurPos);
 
 	free(_gameOffsetsPtr);

Modified: scummvm/trunk/engines/agos/agos.h
===================================================================
--- scummvm/trunk/engines/agos/agos.h	2007-07-25 04:52:12 UTC (rev 28188)
+++ scummvm/trunk/engines/agos/agos.h	2007-07-25 11:29:47 UTC (rev 28189)
@@ -28,6 +28,7 @@
 
 #include "engines/engine.h"
 
+#include "common/array.h"
 #include "common/keyboard.h"
 #include "common/rect.h"
 #include "common/util.h"
@@ -231,9 +232,7 @@
 	uint _itemArraySize;
 	uint _itemArrayInited;
 
-	byte *_itemHeapPtr;
-	uint _itemHeapCurPos;
-	uint _itemHeapSize;
+	Common::Array<byte *> _itemHeap;
 
 	byte *_iconFilePtr;
 

Modified: scummvm/trunk/engines/agos/items.cpp
===================================================================
--- scummvm/trunk/engines/agos/items.cpp	2007-07-25 04:52:12 UTC (rev 28188)
+++ scummvm/trunk/engines/agos/items.cpp	2007-07-25 11:29:47 UTC (rev 28189)
@@ -42,24 +42,15 @@
 }
 
 byte *AGOSEngine::allocateItem(uint size) {
-	byte *org = _itemHeapPtr;
-	size = (size + sizeof(void*) - 1) & ~(sizeof(void*) - 1);
+	byte *item = new byte[size];
 
-	_itemHeapPtr += size;
-	_itemHeapCurPos += size;
-
-	if (_itemHeapCurPos > _itemHeapSize)
-		error("allocateItem: Itemheap overflow");
-
-	return org;
+	memset(item, 0, size);
+	_itemHeap.push_back(item);
+	return item;
 }
 
 void AGOSEngine::allocItemHeap() {
-	_itemHeapSize = _itemMemSize;
-	_itemHeapCurPos = 0;
-	_itemHeapPtr = (byte *)calloc(_itemMemSize, 1);
-	if (!_itemHeapPtr)
-		error("Out Of Memory - Items");
+	_itemHeap.clear();
 }
 
 bool AGOSEngine::hasIcon(Item *item) {


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