From: Perttu Ahola Date: Wed, 28 Dec 2011 14:25:29 +0000 (+0200) Subject: Fix minetest.env:get_player_by_name(nil) causing segfault and similar things X-Git-Url: http://81.2.79.47:8989/gitweb/?a=commitdiff_plain;h=ad4040d982ad0a52a27df262351fd747b5408265;p=zefram%2Fminetest%2Fminetest_engine.git Fix minetest.env:get_player_by_name(nil) causing segfault and similar things --- diff --git a/src/scriptapi.cpp b/src/scriptapi.cpp index 40ad4d54..4839f2ac 100644 --- a/src/scriptapi.cpp +++ b/src/scriptapi.cpp @@ -228,7 +228,7 @@ static void pushnode(lua_State *L, const MapNode &n, INodeDefManager *ndef) static MapNode readnode(lua_State *L, int index, INodeDefManager *ndef) { lua_getfield(L, index, "name"); - const char *name = lua_tostring(L, -1); + const char *name = luaL_checkstring(L, -1); lua_pop(L, 1); u8 param1; lua_getfield(L, index, "param1"); @@ -489,7 +489,7 @@ static void inventory_set_list_from_lua(Inventory *inv, const char *name, while(lua_next(L, table) != 0){ // key at index -2 and value at index -1 luaL_checktype(L, -1, LUA_TSTRING); - std::string itemstring = lua_tostring(L, -1); + std::string itemstring = luaL_checkstring(L, -1); items.push_back(itemstring); // removes value, keeps key for next iteration lua_pop(L, 1); @@ -1506,7 +1506,7 @@ private: NodeMetadata *meta = getmeta(ref); if(meta == NULL) return 0; // Do it - std::string text = lua_tostring(L, 2); + std::string text = luaL_checkstring(L, 2); meta->setText(text); reportMetadataChange(ref); return 0; @@ -1546,7 +1546,7 @@ private: NodeMetadata *meta = getmeta(ref); if(meta == NULL) return 0; // Do it - std::string text = lua_tostring(L, 2); + std::string text = luaL_checkstring(L, 2); meta->setInfoText(text); reportMetadataChange(ref); return 0; @@ -1560,7 +1560,7 @@ private: if(meta == NULL) return 0; // Do it Inventory *inv = meta->getInventory(); - const char *name = lua_tostring(L, 2); + const char *name = luaL_checkstring(L, 2); inventory_set_list_from_lua(inv, name, L, 3, ref->m_env->getGameDef()); reportMetadataChange(ref); @@ -1575,7 +1575,7 @@ private: if(meta == NULL) return 0; // Do it Inventory *inv = meta->getInventory(); - const char *name = lua_tostring(L, 2); + const char *name = luaL_checkstring(L, 2); inventory_get_list_to_lua(inv, name, L); return 1; } @@ -1587,7 +1587,7 @@ private: NodeMetadata *meta = getmeta(ref); if(meta == NULL) return 0; // Do it - std::string text = lua_tostring(L, 2); + std::string text = luaL_checkstring(L, 2); meta->setInventoryDrawSpec(text); reportMetadataChange(ref); return 0; @@ -1685,7 +1685,7 @@ private: NodeMetadata *meta = getmeta(ref); if(meta == NULL) return 0; // Do it - std::string name = lua_tostring(L, 2); + std::string name = luaL_checkstring(L, 2); size_t len = 0; const char *s = lua_tolstring(L, 3, &len); std::string str(s, len); @@ -1701,7 +1701,7 @@ private: NodeMetadata *meta = getmeta(ref); if(meta == NULL) return 0; // Do it - std::string name = lua_tostring(L, 2); + std::string name = luaL_checkstring(L, 2); std::string str = meta->getString(name); lua_pushlstring(L, str.c_str(), str.size()); return 1; @@ -1957,7 +1957,7 @@ private: ServerActiveObject *co = getobject(ref); if(co == NULL) return 0; // itemstring - const char *itemstring = lua_tostring(L, 2); + const char *itemstring = luaL_checkstring(L, 2); infostream<<"ObjectRef::l_add_to_inventory(): id="<getId() <<" itemstring=\""<setTextureMod(mod); return 0; } @@ -2140,7 +2140,7 @@ private: ObjectRef *ref = checkobject(L, 1); ServerRemotePlayer *player = getplayer(ref); if(player == NULL) return 0; - const char *name = lua_tostring(L, 2); + const char *name = luaL_checkstring(L, 2); // Do it inventory_set_list_from_lua(&player->inventory, name, L, 3, player->getEnv()->getGameDef(), PLAYER_INVENTORY_SIZE); @@ -2154,7 +2154,7 @@ private: ObjectRef *ref = checkobject(L, 1); ServerRemotePlayer *player = getplayer(ref); if(player == NULL) return 0; - const char *name = lua_tostring(L, 2); + const char *name = luaL_checkstring(L, 2); // Do it inventory_get_list_to_lua(&player->inventory, name, L); return 1; @@ -2459,7 +2459,7 @@ private: // pos v3f pos = readFloatPos(L, 2); // content - const char *name = lua_tostring(L, 3); + const char *name = luaL_checkstring(L, 3); // Do it ServerActiveObject *obj = new LuaEntitySAO(env, pos, name, ""); env->addActiveObject(obj); @@ -2477,7 +2477,7 @@ private: // pos v3f pos = readFloatPos(L, 2); // inventorystring - const char *inventorystring = lua_tostring(L, 3); + const char *inventorystring = luaL_checkstring(L, 3); // Do it ServerActiveObject *obj = new ItemSAO(env, pos, inventorystring); env->addActiveObject(obj); @@ -2536,7 +2536,7 @@ private: ServerEnvironment *env = o->m_env; if(env == NULL) return 0; // Do it - const char *name = lua_tostring(L, 2); + const char *name = luaL_checkstring(L, 2); ServerRemotePlayer *player = static_cast(env->getPlayer(name)); if(player == NULL){