Luacontroller: Revert function stripping from digiline messages

This commit is contained in:
Jeija 2017-01-15 20:11:12 +01:00
parent c2e3d7c4e5
commit 54daee236e
2 changed files with 5 additions and 21 deletions

View File

@ -151,24 +151,6 @@ function mesecon.tablecopy(table) -- deep table copy
return newtable
end
function mesecon.tablecopy_stripfunctions(table) -- deep table copy, but remove all functions
if type(table) == "function" then return nil end -- functions become nil
if type(table) ~= "table" then return table end -- no need to copy
local newtable = {}
for idx, item in pairs(table) do
if type(idx) ~= "function" then
if type(item) == "table" then
newtable[idx] = mesecon.tablecopy_stripfunctions(item)
elseif type(item) ~= "function" then
newtable[idx] = item
end
end
end
return newtable
end
function mesecon.cmpAny(t1, t2)
if type(t1) ~= type(t2) then return false end
if type(t1) ~= "table" and type(t2) ~= "table" then return t1 == t2 end

View File

@ -278,9 +278,11 @@ local function get_digiline_send(pos)
return false
end
-- No sending functions over the wire and make sure serialized version
-- of the data is not insanely long to prevent DoS-like attacks
msg = mesecon.tablecopy_stripfunctions(msg)
-- It is technically possible to send functions over the wire since
-- the high performance impact of stripping those from the data has
-- been decided to not be worth the added realism.
-- Make sure serialized version of the data is not insanely long to
-- prevent DoS-like attacks
local msg_ser = minetest.serialize(msg)
if #msg_ser > mesecon.setting("luacontroller_digiline_maxlen", 50000) then
return false