CRUISE: Fix Memory Accesses Errors and Leaks Reported By Valgrind

Most of these fixes are fairly simple, though the clamping of ArrayStates accesses in object.cpp _might_ cause regressions. None are obvious on basic playtest check, but the game will need a full playtest.

svn-id: r54408
This commit is contained in:
David Turner 2010-11-21 12:05:15 +00:00
parent 8045c4f87a
commit e48930c16e
3 changed files with 13 additions and 3 deletions

View File

@ -65,9 +65,7 @@ cellStruct *addCell(cellStruct *pHead, int16 overlayIdx, int16 objIdx, int16 typ
if (currentHead2->type != 5) {
int16 lvar2;
getSingleObjectParam(currentHead2->overlay, currentHead2->idx, 2, &lvar2);
if (lvar2 >= var)
if(getSingleObjectParam(currentHead2->overlay, currentHead2->idx, 2, &lvar2) >= 0 && lvar2 >= var)
break;
}

View File

@ -79,6 +79,12 @@ int16 getMultipleObjectParam(int16 overlayIdx, int16 objectIdx, objectParamsQuer
state = globalVars[overlayTable[overlayIdx].state + ptr->_stateTableIdx];
ptr2 = &ovlData->arrayStates[ptr->_firstStateIdx + state];
if (ptr->_firstStateIdx + state < 0) {
debug(0, "Invalid Negative arrayState index in getMultipleObjectParam(overlayIdx: %d, objectIdx: %d)... Forcing to 0", overlayIdx, objectIdx);
ptr2 = &ovlData->arrayStates[0];
}
state2 = ptr2->state;
break;
}
@ -242,6 +248,11 @@ int16 getSingleObjectParam(int16 overlayIdx, int16 param2, int16 param3, int16 *
state = globalVars[overlayTable[overlayIdx].state + ptr->_stateTableIdx];
ptr2 = &ovlData->arrayStates[ptr->_firstStateIdx + state];
if (ptr->_firstStateIdx + state < 0) {
debug(0, "Invalid Negative arrayState index in getSingleObjectParam(overlayIdx: %d, param2: %d, param3: %d)... Forcing to 0", overlayIdx, param2, param3);
ptr2 = &ovlData->arrayStates[0];
}
break;
}
case VARIABLE: {

View File

@ -40,6 +40,7 @@ class PCSoundDriver {
public:
typedef void (*UpdateCallback)(void *);
PCSoundDriver() { _upCb = NULL, _upRef = NULL, _musicVolume = 0, _sfxVolume = 0; }
virtual ~PCSoundDriver() {}
virtual void setupChannel(int channel, const byte *data, int instrument, int volume) = 0;