From 431d8a9b83be858193328fe59e75026fa023393f Mon Sep 17 00:00:00 2001 From: HybridDog Date: Thu, 7 Mar 2019 08:31:25 +0100 Subject: Abort when trying to set a not registered node (#7011) I removed the MapNode constructor which takes a nodename and gives the node's id or CONTENT_IGNORE The code which used this constructor (two places) now handles the situation of not registered nodes correctly: * minetest.set_node and similar functions make minetest crash when a not registered node is passed * reverting a node with rollback aborts if the node is not registered --- src/script/common/c_content.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src/script') diff --git a/src/script/common/c_content.cpp b/src/script/common/c_content.cpp index 793485e25..361db226e 100644 --- a/src/script/common/c_content.cpp +++ b/src/script/common/c_content.cpp @@ -1093,7 +1093,7 @@ MapNode readnode(lua_State *L, int index, const NodeDefManager *ndef) lua_getfield(L, index, "name"); if (!lua_isstring(L, -1)) throw LuaError("Node name is not set or is not a string!"); - const char *name = lua_tostring(L, -1); + std::string name = lua_tostring(L, -1); lua_pop(L, 1); u8 param1 = 0; @@ -1108,7 +1108,11 @@ MapNode readnode(lua_State *L, int index, const NodeDefManager *ndef) param2 = lua_tonumber(L, -1); lua_pop(L, 1); - return {ndef, name, param1, param2}; + content_t id = CONTENT_IGNORE; + if (!ndef->getId(name, id)) + throw LuaError("\"" + name + "\" is not a registered node!"); + + return {id, param1, param2}; } /******************************************************************************/ -- cgit v1.2.3