summaryrefslogtreecommitdiff
path: root/mesecons_luacontroller/init.lua
diff options
context:
space:
mode:
Diffstat (limited to 'mesecons_luacontroller/init.lua')
-rw-r--r--mesecons_luacontroller/init.lua13
1 files changed, 9 insertions, 4 deletions
diff --git a/mesecons_luacontroller/init.lua b/mesecons_luacontroller/init.lua
index 9fa995f..b99b6e4 100644
--- a/mesecons_luacontroller/init.lua
+++ b/mesecons_luacontroller/init.lua
@@ -127,7 +127,7 @@ end
local code_prohibited = function(code)
-- Clean code
- local prohibited = {"while", "for", "repeat", "until", "function"}
+ local prohibited = {"while", "for", "repeat", "until", "function", "goto"}
for _, p in ipairs(prohibited) do
if string.find(code, p) then
return "Prohibited command: "..p
@@ -139,13 +139,18 @@ local safe_print = function(param)
print(dump(param))
end
-deep_copy = function(original) --deep copy that removes functions
+deep_copy = function(original, visited) --deep copy that removes functions
+ visited = visited or {}
+ if visited[original] ~= nil then --already visited this node
+ return visited[original]
+ end
if type(original) == 'table' then --nested table
local copy = {}
+ visited[original] = copy
for key, value in next, original, nil do
- copy[deep_copy(key)] = deep_copy(value)
+ copy[deep_copy(key, visited)] = deep_copy(value, visited)
end
- setmetatable(copy, deep_copy(getmetatable(original)))
+ setmetatable(copy, deep_copy(getmetatable(original), visited))
return copy
elseif type(original) == 'function' then --ignore functions
return nil