From 25cda4e8b4844aecf8cdc70ffcab8e0adaab3486 Mon Sep 17 00:00:00 2001 From: "madmaxoft@gmail.com" Date: Sun, 12 May 2013 15:58:29 +0000 Subject: cItems: Added runtime bounds-checking to avoid server crashes with badly written plugins. git-svn-id: http://mc-server.googlecode.com/svn/trunk@1472 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- source/Item.cpp | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) (limited to 'source/Item.cpp') diff --git a/source/Item.cpp b/source/Item.cpp index fde4f7ba9..60bd7da95 100644 --- a/source/Item.cpp +++ b/source/Item.cpp @@ -138,3 +138,62 @@ bool cItem::IsEnchantable(short item) + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// cItems: + +cItem * cItems::Get(int a_Idx) +{ + if ((a_Idx < 0) || (a_Idx >= (int)size())) + { + LOGWARNING("cItems: Attempt to get an out-of-bounds item at index %d; there are currently %d items. Returning a nil.", a_Idx, size()); + return NULL; + } + return &at(a_Idx); +} + + + + + +void cItems::Set(int a_Idx, const cItem & a_Item) +{ + if ((a_Idx < 0) || (a_Idx >= (int)size())) + { + LOGWARNING("cItems: Attempt to set an item at an out-of-bounds index %d; there are currently %d items. Not setting.", a_Idx, size()); + return; + } + at(a_Idx) = a_Item; +} + + + + + +void cItems::Delete(int a_Idx) +{ + if ((a_Idx < 0) || (a_Idx >= (int)size())) + { + LOGWARNING("cItems: Attempt to delete an item at an out-of-bounds index %d; there are currently %d items. Ignoring.", a_Idx, size()); + return; + } + erase(begin() + a_Idx); +} + + + + + +void cItems::Set(int a_Idx, ENUM_ITEM_ID a_ItemType, char a_ItemCount, short a_ItemDamage) +{ + if ((a_Idx < 0) || (a_Idx >= (int)size())) + { + LOGWARNING("cItems: Attempt to set an item at an out-of-bounds index %d; there are currently %d items. Not setting.", a_Idx, size()); + return; + } + at(a_Idx) = cItem(a_ItemType, a_ItemCount, a_ItemDamage); +} + + + + -- cgit v1.2.3