diff options
| -rw-r--r-- | mesecons_luacontroller/init.lua | 13 | 
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 | 
