# HG changeset patch # User jbe # Date 1425163880 -3600 # Node ID ba596113a7991da784e8998683ff338caae83637 # Parent 4ab91adeab6f479733edde4d0a8af5f4f3a2d458 Exception for setting global variables diff -r 4ab91adeab6f -r ba596113a799 framework/bin/mcp.lua --- a/framework/bin/mcp.lua Sat Feb 28 23:37:27 2015 +0100 +++ b/framework/bin/mcp.lua Sat Feb 28 23:51:20 2015 +0100 @@ -4,6 +4,7 @@ -- allow control of global environment local _G = _G +local allowed_globals = {} local global_metatable = { __index = _G, __newindex = function(self, key, value) @@ -163,20 +164,17 @@ end end if self == _ENV then - _G[key] = false -- allow writing global variable + allowed_globals[key] = true end if merge and try_exec(merge_path .. ".lua") then elseif merge and try_dir(merge_path .. "/") then elseif try_exec(path .. ".lua") then elseif try_dir(path .. "/") then else end - local value = rawget(self, key) - if self == _ENV and value == false then - _G[key] = nil - return nil - else - return value + if self == _ENV then + allowed_globals[key] = nil end + return rawget(self, key) end install_autoloader(_G, nil, "") try_exec(WEBMCP_FRAMEWORK_PATH .. "env/__init.lua") @@ -191,8 +189,11 @@ end -- prohibit (unintended) definition of new global variables -function global_metatable.__newindex() - error("Setting of global variable prohibited", 2) +function global_metatable.__newindex(self, key, value) + if not allowed_globals[key] then + error("Setting of global variable prohibited", 2) + end + rawset(self, key, value) end -- execute configurations and pre-fork initializers