Skip to content

Commit 833ed77

Browse files
authored
Validate & sanitize formspec fields (#3022)
1 parent 4c6e199 commit 833ed77

File tree

4 files changed

+16
-9
lines changed

4 files changed

+16
-9
lines changed

mods/creative/inventory.lua

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -192,10 +192,13 @@ function creative.register_tab(name, title, items)
192192
inv.start_i = 0
193193
inv.filter = ""
194194
sfinv.set_player_inventory_formspec(player, context)
195-
elseif fields.creative_search or
196-
fields.key_enter_field == "creative_filter" then
195+
elseif (fields.creative_search or
196+
fields.key_enter_field == "creative_filter")
197+
and fields.creative_filter then
197198
inv.start_i = 0
198-
inv.filter = fields.creative_filter:lower()
199+
inv.filter = fields.creative_filter:sub(1, 128) -- truncate to a sane length
200+
:gsub("[%z\1-\8\11-\31\127]", "") -- strip naughty control characters (keeps \t and \n)
201+
:lower() -- search is case insensitive
199202
sfinv.set_player_inventory_formspec(player, context)
200203
elseif not fields.quit then
201204
local start_i = inv.start_i or 0

mods/default/craftitems.lua

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
148148
return
149149
end
150150

151-
if fields.close then
151+
if fields.quit then
152152
book_writers[player_name] = nil
153153
end
154154

@@ -179,6 +179,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
179179
data.description = S("\"@1\" by @2", short_title, data.owner)
180180
data.text = fields.text:sub(1, max_text_size)
181181
data.text = data.text:gsub("\r\n", "\n"):gsub("\r", "\n")
182+
data.text = data.text:gsub("[%z\1-\8\11-\31\127]", "") -- strip naughty control characters (keeps \t and \n)
182183
data.page = 1
183184
data.page_max = math.ceil((#data.text:gsub("[^\n]", "") + 1) / lpp)
184185

mods/default/nodes.lua

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2597,12 +2597,12 @@ local function register_sign(material, desc, def)
25972597
if not text then
25982598
return
25992599
end
2600-
if string.len(text) > 512 then
2600+
if #text > 512 then
26012601
minetest.chat_send_player(player_name, S("Text too long"))
26022602
return
26032603
end
2604-
default.log_player_action(sender, "wrote \"" .. text ..
2605-
"\" to the sign at", pos)
2604+
text = text:gsub("[%z-\8\11-\31\127]", "") -- strip naughty control characters (keeps \t and \n)
2605+
default.log_player_action(sender, ("wrote %q to the sign at"):format(text), pos)
26062606
local meta = minetest.get_meta(pos)
26072607
meta:set_string("text", text)
26082608

mods/mtg_craftguide/init.lua

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -345,8 +345,11 @@ local function on_receive_fields(player, fields)
345345
data.items = init_items
346346
return true
347347

348-
elseif fields.key_enter_field == "filter" or fields.search then
349-
local new = fields.filter:lower()
348+
elseif (fields.key_enter_field == "filter" or fields.search)
349+
and fields.filter then
350+
local new = fields.filter:sub(1, 128) -- truncate to a sane length
351+
:gsub("[%z\1-\8\11-\31\127]", "") -- strip naughty control characters (keeps \t and \n)
352+
:lower() -- search is case insensitive
350353
if data.filter == new then
351354
return
352355
end

0 commit comments

Comments
 (0)