[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