mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-13 23:01:30 +00:00
[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:
parent
445c94bf4a
commit
30f35a920b
@ -4283,10 +4283,12 @@ void Bot::AddBotItem(
|
|||||||
|
|
||||||
if (!database.botdb.SaveItemBySlot(this, slot_id, inst)) {
|
if (!database.botdb.SaveItemBySlot(this, slot_id, inst)) {
|
||||||
LogError("Failed to save item by slot to slot [{}] for [{}].", slot_id, GetCleanName());
|
LogError("Failed to save item by slot to slot [{}] for [{}].", slot_id, GetCleanName());
|
||||||
|
safe_delete(inst);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_inv.PutItem(slot_id, *inst);
|
m_inv.PutItem(slot_id, *inst);
|
||||||
|
safe_delete(inst);
|
||||||
|
|
||||||
BotAddEquipItem(slot_id, item_id);
|
BotAddEquipItem(slot_id, item_id);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2039,6 +2039,7 @@ void Client::Handle_OP_AdventureMerchantPurchase(const EQApplicationPacket *app)
|
|||||||
{
|
{
|
||||||
PutLootInInventory(EQ::invslot::slotCursor, *inst);
|
PutLootInInventory(EQ::invslot::slotCursor, *inst);
|
||||||
}
|
}
|
||||||
|
safe_delete(inst);
|
||||||
Save(1);
|
Save(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2549,6 +2550,7 @@ void Client::Handle_OP_AltCurrencyPurchase(const EQApplicationPacket *app)
|
|||||||
{
|
{
|
||||||
PutLootInInventory(EQ::invslot::slotCursor, *inst);
|
PutLootInInventory(EQ::invslot::slotCursor, *inst);
|
||||||
}
|
}
|
||||||
|
safe_delete(inst);
|
||||||
|
|
||||||
Save(1);
|
Save(1);
|
||||||
}
|
}
|
||||||
@ -14463,6 +14465,7 @@ void Client::Handle_OP_Trader(const EQApplicationPacket *app)
|
|||||||
|
|
||||||
if (!TradeItemsValid) {
|
if (!TradeItemsValid) {
|
||||||
Trader_EndTrader();
|
Trader_EndTrader();
|
||||||
|
safe_delete(gis);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1903,6 +1903,7 @@ void NPC::PickPocket(Client* thief)
|
|||||||
}
|
}
|
||||||
RemoveItem(item_inst->GetID());
|
RemoveItem(item_inst->GetID());
|
||||||
thief->SendPickPocketResponse(this, 0, PickPocketItem, item_inst->GetItem());
|
thief->SendPickPocketResponse(this, 0, PickPocketItem, item_inst->GetItem());
|
||||||
|
safe_delete(item_inst);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1151,8 +1151,8 @@ void Client::Trader_EndTrader() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
safe_delete(outapp);
|
safe_delete(outapp);
|
||||||
safe_delete(gis);
|
|
||||||
}
|
}
|
||||||
|
safe_delete(gis);
|
||||||
}
|
}
|
||||||
|
|
||||||
database.DeleteTraderItem(CharacterID());
|
database.DeleteTraderItem(CharacterID());
|
||||||
|
|||||||
@ -675,8 +675,8 @@ void ZoneDatabase::LoadWorldContainer(uint32 parentid, EQ::ItemInstance* contain
|
|||||||
inst->PutAugment(&database, i, aug[i]);
|
inst->PutAugment(&database, i, aug[i]);
|
||||||
// Put item inside world container
|
// Put item inside world container
|
||||||
container->PutItem(index, *inst);
|
container->PutItem(index, *inst);
|
||||||
safe_delete(inst);
|
|
||||||
}
|
}
|
||||||
|
safe_delete(inst);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user