diff options
author | HybridDog <ovvv@web.de> | 2019-03-07 08:31:25 +0100 |
---|---|---|
committer | Loïc Blot <nerzhul@users.noreply.github.com> | 2019-03-07 08:31:25 +0100 |
commit | 431d8a9b83be858193328fe59e75026fa023393f (patch) | |
tree | b5773cb8dd581f4e65ff4977e148483b23ad4d0b /src/rollback_interface.cpp | |
parent | 3066d76e33070f0ec598b522b519fd6c1ddaf10e (diff) | |
download | minetest-431d8a9b83be858193328fe59e75026fa023393f.tar.gz minetest-431d8a9b83be858193328fe59e75026fa023393f.tar.bz2 minetest-431d8a9b83be858193328fe59e75026fa023393f.zip |
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
Diffstat (limited to 'src/rollback_interface.cpp')
-rw-r--r-- | src/rollback_interface.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/rollback_interface.cpp b/src/rollback_interface.cpp index 3ac15544c..1f904c4cc 100644 --- a/src/rollback_interface.cpp +++ b/src/rollback_interface.cpp @@ -139,7 +139,12 @@ bool RollbackAction::applyRevert(Map *map, InventoryManager *imgr, IGameDef *gam return false; } // Create rollback node - MapNode n(ndef, n_old.name, n_old.param1, n_old.param2); + content_t id = CONTENT_IGNORE; + if (!ndef->getId(n_old.name, id)) { + // The old node is not registered + return false; + } + MapNode n(id, n_old.param1, n_old.param2); // Set rollback node try { if (!map->addNodeWithEvent(p, n)) { @@ -203,7 +208,7 @@ bool RollbackAction::applyRevert(Map *map, InventoryManager *imgr, IGameDef *gam << inventory_location << std::endl; return false; } - + // If item was added, take away item, otherwise add removed item if (inventory_add) { // Silently ignore different current item |