From c75f57785e586a2cbf2bc69553d9873e65d18d15 Mon Sep 17 00:00:00 2001 From: Asdow <20314541+Asdow@users.noreply.github.com> Date: Mon, 18 Nov 2024 18:49:38 +0200 Subject: [PATCH] Guard against out of bounds access Can't trust a simple != check --- Tactical/Handle Items.cpp | 8 ++++---- Tactical/Interface Items.cpp | 3 +-- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/Tactical/Handle Items.cpp b/Tactical/Handle Items.cpp index d95b6157..55679a76 100644 --- a/Tactical/Handle Items.cpp +++ b/Tactical/Handle Items.cpp @@ -4292,7 +4292,7 @@ BOOLEAN DrawItemPoolList( ITEM_POOL *pItemPool, INT32 sGridNo, UINT8 bCommand, I if (gGameExternalOptions.gfShowBackpackOwner && Item[gWorldItems[pItemPool->iItemIndex].object.usItem].usItemClass == IC_LBEGEAR && LoadBearingEquipment[Item[gWorldItems[pItemPool->iItemIndex].object.usItem].ubClassIndex].lbeClass == BACKPACK && - gWorldItems[pItemPool->iItemIndex].soldierID != NOBODY) + gWorldItems[pItemPool->iItemIndex].soldierID < NOBODY) swprintf(pStr, L"%s (%d) (%s)", ShortItemNames[gWorldItems[pTempItemPool->iItemIndex].object.usItem], gWorldItems[pTempItemPool->iItemIndex].object.ubNumberOfObjects, gWorldItems[pItemPool->iItemIndex].soldierID->GetName()); else swprintf( pStr, L"%s (%d)", ShortItemNames[ gWorldItems[ pTempItemPool->iItemIndex ].object.usItem ], gWorldItems[ pTempItemPool->iItemIndex ].object.ubNumberOfObjects ); @@ -4302,7 +4302,7 @@ BOOLEAN DrawItemPoolList( ITEM_POOL *pItemPool, INT32 sGridNo, UINT8 bCommand, I if (gGameExternalOptions.gfShowBackpackOwner && Item[gWorldItems[pItemPool->iItemIndex].object.usItem].usItemClass == IC_LBEGEAR && LoadBearingEquipment[Item[gWorldItems[pItemPool->iItemIndex].object.usItem].ubClassIndex].lbeClass == BACKPACK && - gWorldItems[pItemPool->iItemIndex].soldierID != NOBODY) + gWorldItems[pItemPool->iItemIndex].soldierID < NOBODY) swprintf(pStr, L"%s (%s)", ShortItemNames[gWorldItems[pTempItemPool->iItemIndex].object.usItem], gWorldItems[pItemPool->iItemIndex].soldierID->GetName()); else swprintf( pStr, L"%s", ShortItemNames[ gWorldItems[ pTempItemPool->iItemIndex ].object.usItem ] ); @@ -4411,7 +4411,7 @@ BOOLEAN DrawItemPoolList( ITEM_POOL *pItemPool, INT32 sGridNo, UINT8 bCommand, I if (gGameExternalOptions.gfShowBackpackOwner && Item[gWorldItems[pItemPool->iItemIndex].object.usItem].usItemClass == IC_LBEGEAR && LoadBearingEquipment[Item[gWorldItems[pItemPool->iItemIndex].object.usItem].ubClassIndex].lbeClass == BACKPACK && - gWorldItems[pItemPool->iItemIndex].soldierID != NOBODY) + gWorldItems[pItemPool->iItemIndex].soldierID < NOBODY) swprintf(pStr, L"%s (%d) (%s)", ShortItemNames[gWorldItems[pItemPool->iItemIndex].object.usItem], gWorldItems[pItemPool->iItemIndex].object.ubNumberOfObjects, gWorldItems[pItemPool->iItemIndex].soldierID->GetName()); else swprintf( pStr, L"%s (%d)", ShortItemNames[ gWorldItems[ pItemPool->iItemIndex ].object.usItem ], gWorldItems[ pItemPool->iItemIndex ].object.ubNumberOfObjects ); @@ -4421,7 +4421,7 @@ BOOLEAN DrawItemPoolList( ITEM_POOL *pItemPool, INT32 sGridNo, UINT8 bCommand, I if (gGameExternalOptions.gfShowBackpackOwner && Item[gWorldItems[pItemPool->iItemIndex].object.usItem].usItemClass == IC_LBEGEAR && LoadBearingEquipment[Item[gWorldItems[pItemPool->iItemIndex].object.usItem].ubClassIndex].lbeClass == BACKPACK && - gWorldItems[pItemPool->iItemIndex].soldierID != NOBODY) + gWorldItems[pItemPool->iItemIndex].soldierID < NOBODY) swprintf(pStr, L"%s (%s)", ShortItemNames[gWorldItems[pItemPool->iItemIndex].object.usItem], gWorldItems[pItemPool->iItemIndex].soldierID->GetName()); else swprintf( pStr, L"%s", ShortItemNames[ gWorldItems[ pItemPool->iItemIndex ].object.usItem ] ); diff --git a/Tactical/Interface Items.cpp b/Tactical/Interface Items.cpp index b3f56f6a..bbecd3c6 100644 --- a/Tactical/Interface Items.cpp +++ b/Tactical/Interface Items.cpp @@ -11482,8 +11482,7 @@ void RenderItemPickupMenu( ) !gfStealing && Item[gWorldItems[gItemPickupMenu.ItemPoolSlots[cnt]->iItemIndex].object.usItem].usItemClass == IC_LBEGEAR && LoadBearingEquipment[Item[gWorldItems[gItemPickupMenu.ItemPoolSlots[cnt]->iItemIndex].object.usItem].ubClassIndex].lbeClass == BACKPACK && - gWorldItems[gItemPickupMenu.ItemPoolSlots[cnt]->iItemIndex].soldierID != NOBODY && - gWorldItems[gItemPickupMenu.ItemPoolSlots[cnt]->iItemIndex].soldierID) + gWorldItems[gItemPickupMenu.ItemPoolSlots[cnt]->iItemIndex].soldierID < NOBODY) //swprintf(pStr, L"%s (%s)", ShortItemNames[pObject->usItem], MercPtrs[gWorldItems[gItemPickupMenu.ItemPoolSlots[cnt]->iItemIndex].soldierID]->GetName()); swprintf(pStr, L"(%s)", gWorldItems[gItemPickupMenu.ItemPoolSlots[cnt]->iItemIndex].soldierID->GetName()); else