diff options
-rw-r--r-- | src/inventorymanager.cpp | 39 |
1 files changed, 23 insertions, 16 deletions
diff --git a/src/inventorymanager.cpp b/src/inventorymanager.cpp index 96ce48086..d23d1529d 100644 --- a/src/inventorymanager.cpp +++ b/src/inventorymanager.cpp @@ -172,16 +172,16 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame Inventory *inv_from = mgr->getInventory(from_inv); Inventory *inv_to = mgr->getInventory(to_inv); - if(!inv_from){ - infostream<<"IMoveAction::apply(): FAIL: source inventory not found: " - <<"from_inv=\""<<from_inv.dump()<<"\"" - <<", to_inv=\""<<to_inv.dump()<<"\""<<std::endl; + if (!inv_from) { + infostream << "IMoveAction::apply(): FAIL: source inventory not found: " + << "from_inv=\""<<from_inv.dump() << "\"" + << ", to_inv=\"" << to_inv.dump() << "\"" << std::endl; return; } - if(!inv_to){ - infostream<<"IMoveAction::apply(): FAIL: destination inventory not found: " - <<"from_inv=\""<<from_inv.dump()<<"\"" - <<", to_inv=\""<<to_inv.dump()<<"\""<<std::endl; + if (!inv_to) { + infostream << "IMoveAction::apply(): FAIL: destination inventory not found: " + << "from_inv=\"" << from_inv.dump() << "\"" + << ", to_inv=\"" << to_inv.dump() << "\"" << std::endl; return; } @@ -191,16 +191,16 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame /* If a list doesn't exist or the source item doesn't exist */ - if(!list_from){ - infostream<<"IMoveAction::apply(): FAIL: source list not found: " - <<"from_inv=\""<<from_inv.dump()<<"\"" - <<", from_list=\""<<from_list<<"\""<<std::endl; + if (!list_from) { + infostream << "IMoveAction::apply(): FAIL: source list not found: " + << "from_inv=\"" << from_inv.dump() << "\"" + << ", from_list=\"" << from_list << "\"" << std::endl; return; } - if(!list_to){ - infostream<<"IMoveAction::apply(): FAIL: destination list not found: " - <<"to_inv=\""<<to_inv.dump()<<"\"" - <<", to_list=\""<<to_list<<"\""<<std::endl; + if (!list_to) { + infostream << "IMoveAction::apply(): FAIL: destination list not found: " + << "to_inv=\""<<to_inv.dump() << "\"" + << ", to_list=\"" << to_list << "\"" << std::endl; return; } @@ -246,6 +246,13 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame move_somewhere = true; return; } + + if ((u16)to_i > list_to->getSize()) { + infostream << "IMoveAction::apply(): FAIL: destination index out of bounds: " + << "to_i=" << to_i + << ", size=" << list_to->getSize() << std::endl; + return; + } /* Do not handle rollback if both inventories are that of the same player */ |