From: sapier Date: Mon, 11 Nov 2013 23:06:14 +0000 (+0100) Subject: Fix invalid listname and listsize not handled correctly in set_size X-Git-Tag: 0.4.8~44 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=90e7832408eb313676d40b747ec533c3b07e5c28;p=oweals%2Fminetest.git Fix invalid listname and listsize not handled correctly in set_size --- diff --git a/doc/lua_api.txt b/doc/lua_api.txt index db9a5e8fa..7da978672 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -1726,6 +1726,7 @@ methods: - is_empty(listname): return true if list is empty - get_size(listname): get size of a list - set_size(listname, size): set size of a list + ^ returns false on error (e.g. invalid listname or listsize) - get_width(listname): get width of a list - set_width(listname, width): set width of list; currently used for crafting - get_stack(listname, i): get a copy of stack index i in list diff --git a/src/inventory.cpp b/src/inventory.cpp index 2ce50e019..f4a87bec1 100644 --- a/src/inventory.cpp +++ b/src/inventory.cpp @@ -957,6 +957,9 @@ InventoryList * Inventory::addList(const std::string &name, u32 size) } else { + //don't create list with invalid name + if (name.find(" ") != std::string::npos) return NULL; + InventoryList *list = new InventoryList(name, size, m_itemdef); m_lists.push_back(list); return list; diff --git a/src/script/lua_api/l_inventory.cpp b/src/script/lua_api/l_inventory.cpp index 67b78bcaf..d783cf60f 100644 --- a/src/script/lua_api/l_inventory.cpp +++ b/src/script/lua_api/l_inventory.cpp @@ -117,24 +117,38 @@ int InvRef::l_set_size(lua_State *L) NO_MAP_LOCK_REQUIRED; InvRef *ref = checkobject(L, 1); const char *listname = luaL_checkstring(L, 2); + int newsize = luaL_checknumber(L, 3); + if (newsize < 0) { + lua_pushboolean(L, false); + return 1; + } + Inventory *inv = getinv(L, ref); if(inv == NULL){ - return 0; + lua_pushboolean(L, false); + return 1; } if(newsize == 0){ inv->deleteList(listname); reportInventoryChange(L, ref); - return 0; + lua_pushboolean(L, true); + return 1; } InventoryList *list = inv->getList(listname); if(list){ list->setSize(newsize); } else { list = inv->addList(listname, newsize); + if (!list) + { + lua_pushboolean(L, false); + return 1; + } } reportInventoryChange(L, ref); - return 0; + lua_pushboolean(L, true); + return 1; } // set_width(self, listname, size)