Skip to content

Commit ecc3e77

Browse files
Fix checks for trade item register/unregister
1 parent b2aa43b commit ecc3e77

1 file changed

Lines changed: 15 additions & 0 deletions

File tree

src/Trading.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,9 @@ static void tradeConfirmCancel(CNSocket* sock, CNPacketData* data) {
340340
static void tradeRegisterItem(CNSocket* sock, CNPacketData* data) {
341341
sP_CL2FE_REQ_PC_TRADE_ITEM_REGISTER* pacdat = (sP_CL2FE_REQ_PC_TRADE_ITEM_REGISTER*)data->buf;
342342

343+
if (pacdat->Item.iInvenNum < 0 || pacdat->Item.iInvenNum >= AINVEN_COUNT)
344+
return; // inventory bounds check
345+
343346
if (pacdat->Item.iSlotNum < 0 || pacdat->Item.iSlotNum > 4)
344347
return; // sanity check, there are only 5 trade slots
345348

@@ -353,7 +356,13 @@ static void tradeRegisterItem(CNSocket* sock, CNPacketData* data) {
353356
return;
354357

355358
Player* plr = PlayerManager::getPlayer(sock);
359+
if (!plr->isTrading)
360+
return;
361+
356362
Player* plr2 = PlayerManager::getPlayer(otherSock);
363+
if (!plr2->isTrading)
364+
return;
365+
357366
plr->Trade[pacdat->Item.iSlotNum] = pacdat->Item;
358367
plr->isTradeConfirm = false;
359368
plr2->isTradeConfirm = false;
@@ -397,7 +406,13 @@ static void tradeUnregisterItem(CNSocket* sock, CNPacketData* data) {
397406
return;
398407

399408
Player* plr = PlayerManager::getPlayer(sock);
409+
if (!plr->isTrading)
410+
return;
411+
400412
Player* plr2 = PlayerManager::getPlayer(otherSock);
413+
if (!plr2->isTrading)
414+
return;
415+
401416
plr->isTradeConfirm = false;
402417
plr2->isTradeConfirm = false;
403418

0 commit comments

Comments
 (0)