Fix hiding Lua __metatable -- prevent setmetatable() override

This commit is contained in:
Robin Gareus
2017-03-30 05:06:34 +02:00
parent 33b859a807
commit ea8c6e9fc8
2 changed files with 23 additions and 3 deletions

View File

@@ -363,7 +363,7 @@ private:
if (Security::hideMetatables ())
{
lua_pushnil (L);
lua_pushboolean (L, false);
rawsetfield (L, -2, "__metatable");
}
}
@@ -400,7 +400,7 @@ private:
if (Security::hideMetatables ())
{
lua_pushnil (L);
lua_pushboolean (L, false);
rawsetfield (L, -2, "__metatable");
}
}
@@ -442,7 +442,7 @@ private:
if (Security::hideMetatables ())
{
lua_pushnil (L);
lua_pushboolean (L, false);
rawsetfield (L, -2, "__metatable");
}
}
@@ -1161,8 +1161,14 @@ private:
lua_setfield(L, -2, "__index");
lua_pushcclosure (L, CFunc::array_newindex<T>, 0);
lua_setfield(L, -2, "__newindex");
if (Security::hideMetatables ())
{
lua_pushboolean (L, false);
rawsetfield (L, -2, "__metatable");
}
lua_pop (L, 1);
createConstTable (name);
lua_pushcfunction (L, &CFunc::gcMetaMethod <T>);
rawsetfield (L, -2, "__gc");
@@ -1532,6 +1538,12 @@ private:
lua_pushcfunction (L, &tostringMetaMethod);
rawsetfield (L, -2, "__tostring");
#endif
if (Security::hideMetatables ())
{
lua_pushboolean (L, false);
rawsetfield (L, -2, "__metatable");
}
}
}