127
127
128
128
local code_prohibited = function (code )
129
129
-- Clean code
130
- local prohibited = {" while" , " for" , " repeat" , " until" , " function" }
130
+ local prohibited = {" while" , " for" , " repeat" , " until" , " function" , " goto " }
131
131
for _ , p in ipairs (prohibited ) do
132
132
if string.find (code , p ) then
133
133
return " Prohibited command: " .. p
@@ -139,13 +139,18 @@ local safe_print = function(param)
139
139
print (dump (param ))
140
140
end
141
141
142
- deep_copy = function (original ) -- deep copy that removes functions
142
+ deep_copy = function (original , visited ) -- deep copy that removes functions
143
+ visited = visited or {}
144
+ if visited [original ] ~= nil then -- already visited this node
145
+ return visited [original ]
146
+ end
143
147
if type (original ) == ' table' then -- nested table
144
148
local copy = {}
149
+ visited [original ] = copy
145
150
for key , value in next , original , nil do
146
- copy [deep_copy (key )] = deep_copy (value )
151
+ copy [deep_copy (key , visited )] = deep_copy (value , visited )
147
152
end
148
- setmetatable (copy , deep_copy (getmetatable (original )))
153
+ setmetatable (copy , deep_copy (getmetatable (original ), visited ))
149
154
return copy
150
155
elseif type (original ) == ' function' then -- ignore functions
151
156
return nil
0 commit comments