From d9de29fa50a7d264d68f2530f0b57ada0f8b4903 Mon Sep 17 00:00:00 2001
From: ShadowNinja <shadowninja@minetest.net>
Date: Fri, 13 Jun 2014 17:07:42 -0400
Subject: Clear inventory before setting lists

---
 src/script/lua_api/l_inventory.cpp | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)

(limited to 'src')

diff --git a/src/script/lua_api/l_inventory.cpp b/src/script/lua_api/l_inventory.cpp
index a45ae5168..f48f6083b 100644
--- a/src/script/lua_api/l_inventory.cpp
+++ b/src/script/lua_api/l_inventory.cpp
@@ -271,19 +271,20 @@ int InvRef::l_set_lists(lua_State *L)
 	if (!inv) {
 		return 0;
 	}
+
+	// Make a temporary inventory in case reading fails
+	Inventory *tempInv(inv);
+	tempInv->clear();
+
+	Server *server = getServer(L);
+
 	lua_pushnil(L);
 	while (lua_next(L, 2)) {
-		const char* listname = lua_tostring(L, -2);
-		InventoryList *list = inv->getList(listname);
-		if (list) {
-			read_inventory_list(L, -1, inv, listname,
-					getServer(L), list->getSize());
-		} else {
-			read_inventory_list(L, -1, inv, listname,
-					getServer(L));
-		}
+		const char *listname = lua_tostring(L, -2);
+		read_inventory_list(L, -1, tempInv, listname, server);
 		lua_pop(L, 1);
 	}
+	inv = tempInv;
 	return 0;
 }
 
-- 
cgit v1.2.3