Limit sign length to 512 (~6 lines of 80 char or so).
authorAuke Kok <sofar@foo-projects.org>
Tue, 5 Feb 2019 05:28:00 +0000 (21:28 -0800)
committersofar <sofar+github@foo-projects.org>
Fri, 8 Feb 2019 07:57:42 +0000 (23:57 -0800)
Players can enter unlimited text into the field, causing lag and
potentially locking up clients. I have not found any negative effects
server side, other than the large storage needed to store the long
text.

mods/default/nodes.lua

index ecd8f7769e078310f961257a21fd76e025d75944..c067eac3e95c4e6d631dffe32420938b113c1069 100644 (file)
@@ -2575,12 +2575,19 @@ local function register_sign(material, desc, def)
                                minetest.record_protection_violation(pos, player_name)
                                return
                        end
-                       local meta = minetest.get_meta(pos)
-                       if not fields.text then return end
+                       local text = fields.text
+                       if not text then
+                               return
+                       end
+                       if string.len(text) > 512 then
+                               minetest.chat_send_player(player_name, "Text too long")
+                               return
+                       end
                        minetest.log("action", (player_name or "") .. " wrote \"" ..
-                               fields.text .. "\" to sign at " .. minetest.pos_to_string(pos))
-                       meta:set_string("text", fields.text)
-                       meta:set_string("infotext", '"' .. fields.text .. '"')
+                               text .. "\" to sign at " .. minetest.pos_to_string(pos))
+                       local meta = minetest.get_meta(pos)
+                       meta:set_string("text", text)
+                       meta:set_string("infotext", '"' .. text .. '"')
                end,
        })
 end