Commit d86c4a7b authored by antirez's avatar antirez
Browse files

mt.declared is no longer needed.

Lua global protection can now be simpified becuase we no longer have the
global() function. It's useless to occupy memory with this table, it is
also not faster because the metamethods we use are only called when a
global object does not exist or we are trying to create it from a
script.
parent 6663653f
...@@ -426,19 +426,17 @@ void scriptingEnableGlobalsProtection(lua_State *lua) { ...@@ -426,19 +426,17 @@ void scriptingEnableGlobalsProtection(lua_State *lua) {
* Modified to be adapted to Redis. */ * Modified to be adapted to Redis. */
s[j++]="local mt = {}\n"; s[j++]="local mt = {}\n";
s[j++]="setmetatable(_G, mt)\n"; s[j++]="setmetatable(_G, mt)\n";
s[j++]="mt.declared = {}\n";
s[j++]="mt.__newindex = function (t, n, v)\n"; s[j++]="mt.__newindex = function (t, n, v)\n";
s[j++]=" if not mt.declared[n] and debug.getinfo(2) then\n"; s[j++]=" if debug.getinfo(2) then\n";
s[j++]=" local w = debug.getinfo(2, \"S\").what\n"; s[j++]=" local w = debug.getinfo(2, \"S\").what\n";
s[j++]=" if w ~= \"main\" and w ~= \"C\" then\n"; s[j++]=" if w ~= \"main\" and w ~= \"C\" then\n";
s[j++]=" error(\"Script attempted to create global variable '\"..tostring(n)..\"'\", 2)\n"; s[j++]=" error(\"Script attempted to create global variable '\"..tostring(n)..\"'\", 2)\n";
s[j++]=" end\n"; s[j++]=" end\n";
s[j++]=" mt.declared[n] = true\n";
s[j++]=" end\n"; s[j++]=" end\n";
s[j++]=" rawset(t, n, v)\n"; s[j++]=" rawset(t, n, v)\n";
s[j++]="end\n"; s[j++]="end\n";
s[j++]="mt.__index = function (t, n)\n"; s[j++]="mt.__index = function (t, n)\n";
s[j++]=" if debug.getinfo(2) and not mt.declared[n] and debug.getinfo(2, \"S\").what ~= \"C\" then\n"; s[j++]=" if debug.getinfo(2) and debug.getinfo(2, \"S\").what ~= \"C\" then\n";
s[j++]=" error(\"Script attempted to access unexisting global variable '\"..n..\"'\", 2)\n"; s[j++]=" error(\"Script attempted to access unexisting global variable '\"..n..\"'\", 2)\n";
s[j++]=" end\n"; s[j++]=" end\n";
s[j++]=" return rawget(t, n)\n"; s[j++]=" return rawget(t, n)\n";
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment