From 4b42b95a8cde7297c660818e08afe65e8214e156 Mon Sep 17 00:00:00 2001 From: lalien Date: Sun, 22 Jul 2007 01:09:21 +0000 Subject: [PATCH] - fixed memory leak in new inventory - fixed some variables not being initialized - fixed swapped parameter in LOS.cpp - added variable range check in lighting.cpp, the cause of wrong index value still not fixed git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@1095 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- Standard Gaming Platform/himage.cpp | 4 ++-- Standard Gaming Platform/shading.cpp | 8 +++++--- Tactical/Interface Items.cpp | 2 +- Tactical/Interface Panels.cpp | 2 +- Tactical/LOS.cpp | 2 +- Tactical/Soldier Control.cpp | 12 ++++++++++-- Tactical/opplist.cpp | 2 +- TileEngine/Tile Animation.cpp | 2 ++ TileEngine/lighting.cpp | 15 +++++++++++++++ 9 files changed, 38 insertions(+), 11 deletions(-) diff --git a/Standard Gaming Platform/himage.cpp b/Standard Gaming Platform/himage.cpp index 0fc9a86e0..84aa5a153 100644 --- a/Standard Gaming Platform/himage.cpp +++ b/Standard Gaming Platform/himage.cpp @@ -783,8 +783,8 @@ UINT16 *Create16BPPPaletteShaded( SGPPaletteEntry *pPalette, UINT32 rscale, UINT // Convert from RGB to 16 bit value UINT16 Get16BPPColor( UINT32 RGBValue ) { - UINT16 r16, g16, b16, usColor; - UINT8 r,g,b; + UINT16 r16, g16, b16, usColor = 0; + UINT8 r, g, b; r = SGPGetRValue( RGBValue ); g = SGPGetGValue( RGBValue ); diff --git a/Standard Gaming Platform/shading.cpp b/Standard Gaming Platform/shading.cpp index e29de1756..d2f6abf11 100644 --- a/Standard Gaming Platform/shading.cpp +++ b/Standard Gaming Platform/shading.cpp @@ -211,7 +211,8 @@ NotThisCol: void BuildShadeTable(void) { UINT16 red, green, blue; - UINT16 index; + UINT16 index = 0; + for(red=0; red < 256; red+=4) for(green=0; green < 256; green+=4) @@ -238,11 +239,12 @@ void BuildShadeTable(void) **********************************************************************************************/ void BuildIntensityTable(void) { - UINT16 red, green, blue; - UINT16 index; + UINT16 red, green, blue = 0; + UINT16 index = 0; FLOAT dShadedPercent = (FLOAT)0.80; + #if 0 UINT32 lumin; diff --git a/Tactical/Interface Items.cpp b/Tactical/Interface Items.cpp index 632db14c2..737cc9882 100644 --- a/Tactical/Interface Items.cpp +++ b/Tactical/Interface Items.cpp @@ -1066,7 +1066,7 @@ void RenderInvBodyPanel( SOLDIERTYPE *pSoldier, INT16 sX, INT16 sY ) void HandleRenderInvSlots( SOLDIERTYPE *pSoldier, UINT8 fDirtyLevel ) { INT32 cnt; - static CHAR16 pStr[ 150 ]; + static CHAR16 pStr[ 512 ]; if ( InItemDescriptionBox( ) || InItemStackPopup( ) || InKeyRingPopup( ) ) { diff --git a/Tactical/Interface Panels.cpp b/Tactical/Interface Panels.cpp index 3e207ec5e..f839b957f 100644 --- a/Tactical/Interface Panels.cpp +++ b/Tactical/Interface Panels.cpp @@ -3798,7 +3798,7 @@ void RenderTEAMPanel( BOOLEAN fDirty ) INT16 sFontX, sFontY; UINT32 cnt, posIndex; SOLDIERTYPE *pSoldier; - static CHAR16 pStr[ 200 ], pMoraleStr[ 20 ]; + static CHAR16 pStr[ 512 ], pMoraleStr[ 20 ]; // WANNE 2 if ( fDirty == DIRTYLEVEL2 ) diff --git a/Tactical/LOS.cpp b/Tactical/LOS.cpp index b1ce5e9c7..c01a41d1b 100644 --- a/Tactical/LOS.cpp +++ b/Tactical/LOS.cpp @@ -4148,7 +4148,7 @@ void MoveBullet( INT32 iBullet ) { iAdjGridNo = iGridNo + DirIncrementer[bDir]; - if ( gubWorldMovementCosts[ iAdjGridNo ][ sDesiredLevel ][ bDir ] < TRAVELCOST_BLOCKED) + if ( gubWorldMovementCosts[ iAdjGridNo ][ bDir ][ sDesiredLevel ] < TRAVELCOST_BLOCKED) { ubTargetID = WhoIsThere2( (INT16) iAdjGridNo, (INT8) sDesiredLevel ); if (ubTargetID != NOBODY) diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index 255dab582..92c99b3d8 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -235,7 +235,11 @@ Inventory::Inventory() { slotCnt = NUM_INV_SLOTS; inv.reserve(slotCnt); for (int idx=0; idx < slotCnt; ++idx) { - OBJECTTYPE *filler = new OBJECTTYPE; // Use MEMALLOC? + //OBJECTTYPE *filler = new OBJECTTYPE; // Use MEMALLOC? + OBJECTTYPE *filler = NULL; + filler = (OBJECTTYPE*)MemAlloc( sizeof( OBJECTTYPE ) ); + memset( filler, 0, sizeof( OBJECTTYPE ) ); + inv.push_back(*filler); } clear(); @@ -246,7 +250,11 @@ Inventory::Inventory(int slotCount) { slotCnt = slotCount; inv.reserve(slotCnt); for (int idx=0; idx < slotCnt; ++idx) { - OBJECTTYPE *filler = new OBJECTTYPE; // Use MEMALLOC? + //OBJECTTYPE *filler = new OBJECTTYPE; // Use MEMALLOC? + OBJECTTYPE *filler = NULL; + filler = (OBJECTTYPE*)MemAlloc( sizeof( OBJECTTYPE ) ); + memset( filler, 0, sizeof( OBJECTTYPE ) ); + inv.push_back(*filler); } clear(); diff --git a/Tactical/opplist.cpp b/Tactical/opplist.cpp index d6d15aed7..fe0701b66 100644 --- a/Tactical/opplist.cpp +++ b/Tactical/opplist.cpp @@ -125,7 +125,7 @@ UINT8 gubKnowledgeValue[10][10] = { // P E R S O N A L O P P L I S T // // -4 -3 -2 -1 0 1 2 3 4 5 // - { 0, 1, 2, 3, 0, 5, 4, 3, 2, 1}, // -4 + { 0, 1, 2, 3, 0, 5, 4, 3, 2, 1}, // -4 { 0, 0, 1, 2, 0, 4, 3, 2, 1, 0}, // -3 O { 0, 0, 0, 1, 0, 3, 2, 1, 0, 0}, // -2 P P { 0, 0, 0, 0, 0, 2, 1, 0, 0, 0}, // -1 U P diff --git a/TileEngine/Tile Animation.cpp b/TileEngine/Tile Animation.cpp index 1afb32f59..6286ff499 100644 --- a/TileEngine/Tile Animation.cpp +++ b/TileEngine/Tile Animation.cpp @@ -71,6 +71,8 @@ ANITILE *CreateAnimationTile( ANITILE_PARAMS *pAniParams ) // Allocate head pNewAniNode = (ANITILE *) MemAlloc( sizeof( ANITILE ) ); + memset( pNewAniNode, 0, sizeof( ANITILE ) ); + if ( (uiFlags & ANITILE_EXISTINGTILE ) ) { pNewAniNode->pLevelNode = pGivenNode; diff --git a/TileEngine/lighting.cpp b/TileEngine/lighting.cpp index 6ef72c2c0..5a7568636 100644 --- a/TileEngine/lighting.cpp +++ b/TileEngine/lighting.cpp @@ -3266,6 +3266,11 @@ BOOLEAN LightSpriteFake(INT32 iSprite) ********************************************************************************/ BOOLEAN LightSpriteDestroy(INT32 iSprite) { + if ( (iSprite >= MAX_LIGHT_SPRITES ) || (iSprite < 0) ) + { + return FALSE; + } + if(LightSprites[iSprite].uiFlags&LIGHT_SPR_ACTIVE) { if(LightSprites[iSprite].uiFlags&LIGHT_SPR_ERASE) @@ -3377,6 +3382,11 @@ BOOLEAN fRenderLights=FALSE; ********************************************************************************/ BOOLEAN LightSpritePosition(INT32 iSprite, INT16 iX, INT16 iY) { + if ( (iSprite >= MAX_LIGHT_SPRITES ) || (iSprite < 0) ) + { + return FALSE; + } + if(LightSprites[iSprite].uiFlags&LIGHT_SPR_ACTIVE) { if((LightSprites[iSprite].iX==iX) && (LightSprites[iSprite].iY==iY)) @@ -3468,6 +3478,11 @@ BOOLEAN LightSpriteRoofStatus(INT32 iSprite, BOOLEAN fOnRoof) ********************************************************************************/ BOOLEAN LightSpritePower(INT32 iSprite, BOOLEAN fOn) { + if ( (iSprite >= MAX_LIGHT_SPRITES ) || (iSprite < 0) ) + { + return FALSE; + } + if(fOn) { //LightSprites[iSprite].uiFlags|=(LIGHT_SPR_ON|LIGHT_SPR_REDRAW);