[Bug Fix] Handle memory leaks from return value of Client::GetTraderItems() (#2266)

* Move delete of ItemInstance to avoid edge case leaking in ZoneDatabase::LoadWorldContainer()

* Delete ItemInstance after use in Client::Handle_OP_AdventureMerchantPurchase()

* Delete ItemInstance after use in NPC::GetEquipmentMaterial()

* Delete ItemInstance after use in Bot::AddBotItem()

* Delete GetItems_Struct in edge case when !TradeItemsValid in Client::Handle_OP_Trader()

* Move delete GetItems_Struct to handle edge case when Customer is not valid in Client::Trader_EndTrader()
This commit is contained in:
Quintinon 2022-07-02 20:01:42 -07:00 committed by GitHub
parent 445c94bf4a
commit 30f35a920b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 8 additions and 2 deletions

View File

@ -4283,10 +4283,12 @@ void Bot::AddBotItem(
if (!database.botdb.SaveItemBySlot(this, slot_id, inst)) {
LogError("Failed to save item by slot to slot [{}] for [{}].", slot_id, GetCleanName());
safe_delete(inst);
return;
}
m_inv.PutItem(slot_id, *inst);
safe_delete(inst);
BotAddEquipItem(slot_id, item_id);
}

View File

@ -2039,6 +2039,7 @@ void Client::Handle_OP_AdventureMerchantPurchase(const EQApplicationPacket *app)
{
PutLootInInventory(EQ::invslot::slotCursor, *inst);
}
safe_delete(inst);
Save(1);
}
@ -2549,6 +2550,7 @@ void Client::Handle_OP_AltCurrencyPurchase(const EQApplicationPacket *app)
{
PutLootInInventory(EQ::invslot::slotCursor, *inst);
}
safe_delete(inst);
Save(1);
}
@ -14463,6 +14465,7 @@ void Client::Handle_OP_Trader(const EQApplicationPacket *app)
if (!TradeItemsValid) {
Trader_EndTrader();
safe_delete(gis);
return;
}

View File

@ -1903,6 +1903,7 @@ void NPC::PickPocket(Client* thief)
}
RemoveItem(item_inst->GetID());
thief->SendPickPocketResponse(this, 0, PickPocketItem, item_inst->GetItem());
safe_delete(item_inst);
return;
}

View File

@ -1151,8 +1151,8 @@ void Client::Trader_EndTrader() {
}
safe_delete(outapp);
safe_delete(gis);
}
safe_delete(gis);
}
database.DeleteTraderItem(CharacterID());

View File

@ -675,8 +675,8 @@ void ZoneDatabase::LoadWorldContainer(uint32 parentid, EQ::ItemInstance* contain
inst->PutAugment(&database, i, aug[i]);
// Put item inside world container
container->PutItem(index, *inst);
safe_delete(inst);
}
safe_delete(inst);
}
}