[Scummvm-cvs-logs] SF.net SVN: scummvm: [28211] scummvm/branches/branch-0-10-0/engines/agos

Kirben at users.sourceforge.net Kirben at users.sourceforge.net
Thu Jul 26 09:21:20 CEST 2007


Revision: 28211
          http://scummvm.svn.sourceforge.net/scummvm/?rev=28211&view=rev
Author:   Kirben
Date:     2007-07-26 00:21:19 -0700 (Thu, 26 Jul 2007)

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

Modified Paths:
--------------
    scummvm/branches/branch-0-10-0/engines/agos/agos.cpp
    scummvm/branches/branch-0-10-0/engines/agos/agos.h
    scummvm/branches/branch-0-10-0/engines/agos/items.cpp

Modified: scummvm/branches/branch-0-10-0/engines/agos/agos.cpp
===================================================================
--- scummvm/branches/branch-0-10-0/engines/agos/agos.cpp	2007-07-26 07:20:52 UTC (rev 28210)
+++ scummvm/branches/branch-0-10-0/engines/agos/agos.cpp	2007-07-26 07:21:19 UTC (rev 28211)
@@ -150,10 +150,6 @@
 	_itemArraySize = 0;
 	_itemArrayInited = 0;
 
-	_itemHeapPtr = 0;
-	_itemHeapCurPos = 0;
-	_itemHeapSize = 0;
-
 	_iconFilePtr = 0;
 
 	_codePtr = 0;
@@ -926,7 +922,11 @@
 
 	_midi.close();
 
-	free(_itemHeapPtr - _itemHeapCurPos);
+	for (uint i = 0; i < _itemHeap.size(); i++) {
+		delete [] _itemHeap[i];
+	}
+	_itemHeap.clear();
+
 	free(_tablesHeapPtr - _tablesHeapCurPos);
 
 	free(_gameOffsetsPtr);
@@ -1061,7 +1061,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/branches/branch-0-10-0/engines/agos/agos.h
===================================================================
--- scummvm/branches/branch-0-10-0/engines/agos/agos.h	2007-07-26 07:20:52 UTC (rev 28210)
+++ scummvm/branches/branch-0-10-0/engines/agos/agos.h	2007-07-26 07:21:19 UTC (rev 28211)
@@ -28,6 +28,7 @@
 
 #include "engines/engine.h"
 
+#include "common/array.h"
 #include "common/rect.h"
 #include "common/util.h"
 
@@ -226,9 +227,7 @@
 	uint _itemArraySize;
 	uint _itemArrayInited;
 
-	byte *_itemHeapPtr;
-	uint _itemHeapCurPos;
-	uint _itemHeapSize;
+	Common::Array<byte *> _itemHeap;
 
 	byte *_iconFilePtr;
 

Modified: scummvm/branches/branch-0-10-0/engines/agos/items.cpp
===================================================================
--- scummvm/branches/branch-0-10-0/engines/agos/items.cpp	2007-07-26 07:20:52 UTC (rev 28210)
+++ scummvm/branches/branch-0-10-0/engines/agos/items.cpp	2007-07-26 07:21:19 UTC (rev 28211)
@@ -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