Skip to content
Permalink
Browse files

Luacontroller: Fix `remove_functions` stack overflow bug

  • Loading branch information...
electrodude authored and Jeija committed Apr 20, 2016
1 parent 4249ed4 commit 6cae381c2788d2e4061c530cc143ca38bd0862e3
Showing with 21 additions and 9 deletions.
  1. +21 −9 mesecons_luacontroller/init.lua
@@ -229,23 +229,35 @@ end

local function remove_functions(x)
local tp = type(x)
if tp == "table" then
if tp == "function" then
return nil
end

-- Make sure to not serialize the same table multiple times, otherwise
-- writing mem.test = mem in the LuaController will lead to infinite recursion
local seen = {}

local function rfuncs(x)
if seen[x] then return end
seen[x] = true
if type(x) ~= "table" then return end

for key, value in pairs(x) do
local key_t, val_t = type(key), type(value)
if key_t == "function" or val_t == "function" then
if type(key) == "function" or type(value) == "function" then
x[key] = nil
else
if key_t == "table" then
remove_functions(key)
if type(key) == "table" then
rfuncs(key)
end
if val_t == "table" then
remove_functions(value)
if type(value) == "table" then
rfuncs(value)
end
end
end
elseif tp == "function" then
return nil
end

rfuncs(x)

return x
end

0 comments on commit 6cae381

Please sign in to comment.
You can’t perform that action at this time.