]> git.lizzy.rs Git - worldedit.git/commitdiff
Harden //mtschemprob against incorrect input
authorsfan5 <sfan5@live.de>
Wed, 22 Mar 2023 20:26:53 +0000 (21:26 +0100)
committersfan5 <sfan5@live.de>
Wed, 22 Mar 2023 20:26:53 +0000 (21:26 +0100)
closes #216

worldedit_commands/init.lua

index 1cdb107712d8aadcd89dad8b1d980d366fd6b570..36d49188afd08111c3877391c795e47d8a273dd6 100644 (file)
@@ -490,7 +490,7 @@ minetest.register_on_punchnode(function(pos, node, puncher)
                        worldedit.player_notify(name, "position 2 set to " .. minetest.pos_to_string(pos))\r
                elseif worldedit.set_pos[name] == "prob" then --setting Minetest schematic node probabilities\r
                        worldedit.prob_pos[name] = pos\r
-                       minetest.show_formspec(puncher:get_player_name(), "prob_val_enter", "field[text;;]")\r
+                       minetest.show_formspec(name, "prob_val_enter", "field[text;;]")\r
                end\r
        end\r
 end)\r
@@ -1644,11 +1644,18 @@ worldedit.register_command("mtschemprob", {
 })\r
 \r
 minetest.register_on_player_receive_fields(function(player, formname, fields)\r
-       if formname == "prob_val_enter" and not (fields.text == "" or fields.text == nil) then\r
+       if formname == "prob_val_enter" then\r
                local name = player:get_player_name()\r
-               local prob_entry = {pos=worldedit.prob_pos[name], prob=tonumber(fields.text)}\r
-               local index = table.getn(worldedit.prob_list[name]) + 1\r
-               worldedit.prob_list[name][index] = prob_entry\r
+               local problist = worldedit.prob_list[name]\r
+               if problist == nil then\r
+                       return\r
+               end\r
+               local e = {pos=worldedit.prob_pos[name], prob=tonumber(fields.text)}\r
+               if e.pos == nil or e.prob == nil or e.prob < 0 or e.prob > 256 then\r
+                       worldedit.player_notify(name, "invalid node probability given, not saved")\r
+                       return\r
+               end\r
+               problist[#problist+1] = e\r
        end\r
 end)\r
 \r