Fix some nullptr exceptions when handling invalid node inventories
authorMetaDucky <metaducky AT gmail DOT com>
Sun, 26 May 2013 10:06:35 +0000 (12:06 +0200)
committerKahrl <kahrl@gmx.net>
Sat, 1 Jun 2013 12:45:43 +0000 (14:45 +0200)
src/script/lua_api/l_inventory.cpp

index 1404c3c8a026fcbf00ca6c57506f1cda50aeab8b..f57a4e8cd8561ab7ca6e01f1029661c22d646930 100644 (file)
@@ -121,6 +121,9 @@ int InvRef::l_set_size(lua_State *L)
        const char *listname = luaL_checkstring(L, 2);
        int newsize = luaL_checknumber(L, 3);
        Inventory *inv = getinv(L, ref);
+       if(inv == NULL){
+               return 0;
+       }
        if(newsize == 0){
                inv->deleteList(listname);
                reportInventoryChange(L, ref);
@@ -144,6 +147,9 @@ int InvRef::l_set_width(lua_State *L)
        const char *listname = luaL_checkstring(L, 2);
        int newwidth = luaL_checknumber(L, 3);
        Inventory *inv = getinv(L, ref);
+       if(inv == NULL){
+               return 0;
+       }
        InventoryList *list = inv->getList(listname);
        if(list){
                list->setWidth(newwidth);
@@ -195,7 +201,11 @@ int InvRef::l_get_list(lua_State *L)
        InvRef *ref = checkobject(L, 1);
        const char *listname = luaL_checkstring(L, 2);
        Inventory *inv = getinv(L, ref);
-       push_inventory_list(inv, listname, L);
+       if(inv){
+               push_inventory_list(inv, listname, L);
+       } else {
+               lua_pushnil(L);
+       }
        return 1;
 }
 
@@ -206,6 +216,9 @@ int InvRef::l_set_list(lua_State *L)
        InvRef *ref = checkobject(L, 1);
        const char *listname = luaL_checkstring(L, 2);
        Inventory *inv = getinv(L, ref);
+       if(inv == NULL){
+               return 0;
+       }
        InventoryList *list = inv->getList(listname);
        if(list)
                read_inventory_list(inv, listname, L, 3,