From 5fa4e001abe90ee5088c001b66d44727319bc052 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 20 Mar 2026 02:36:40 +0000 Subject: [PATCH 2/2] Check PutItemInInventory return value; rollback transaction on failure Co-authored-by: Valorith <76063792+Valorith@users.noreply.github.com> --- zone/inventory.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/zone/inventory.cpp b/zone/inventory.cpp index 9ea858570..027049036 100644 --- a/zone/inventory.cpp +++ b/zone/inventory.cpp @@ -4761,18 +4761,33 @@ bool Client::PutItemInInventoryWithStacking(EQ::ItemInstance *inst) } if (!queue.empty()) { + bool success = true; database.TransactionBegin(); for (auto const &i: queue) { auto bag_inst = GetInv().GetItem(i.slot_id); if (!bag_inst) { LogError("Client inventory error occurred. Character ID {} Slot_ID {}", CharacterID(), i.slot_id); - continue; + success = false; + break; } bag_inst->SetCharges(i.quantity + bag_inst->GetCharges()); - PutItemInInventory(i.slot_id, *bag_inst, true); + if (!PutItemInInventory(i.slot_id, *bag_inst, true)) { + LogError( + "Failed to save stacked item to inventory. Character ID {} Slot_ID {}", + CharacterID(), + i.slot_id + ); + success = false; + break; + } LogError("Write out data. Item {} quantity {} slot {}", bag_inst->GetItem()->Name, i.quantity, i.slot_id); } + if (!success) { + database.TransactionRollback(); + return false; + } + database.TransactionCommit(); }