Fix hiding Lua __metatable -- prevent setmetatable() override
This commit is contained in:
parent
33b859a807
commit
ea8c6e9fc8
@ -84,6 +84,8 @@
|
|||||||
#include "midi++/port.h"
|
#include "midi++/port.h"
|
||||||
#include "midi++/mmc.h"
|
#include "midi++/mmc.h"
|
||||||
|
|
||||||
|
#include "LuaBridge/LuaBridge.h"
|
||||||
|
|
||||||
#include "ardour/analyser.h"
|
#include "ardour/analyser.h"
|
||||||
#include "ardour/audio_library.h"
|
#include "ardour/audio_library.h"
|
||||||
#include "ardour/audio_backend.h"
|
#include "ardour/audio_backend.h"
|
||||||
@ -423,6 +425,12 @@ ARDOUR::init (bool use_windows_vst, bool try_optimization, const char* localedir
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef NDEBUG
|
||||||
|
if (getenv("LUA_METATABLES")) {
|
||||||
|
luabridge::Security::setHideMetatables (false);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!PBD::init()) return false;
|
if (!PBD::init()) return false;
|
||||||
|
|
||||||
#ifdef ENABLE_NLS
|
#ifdef ENABLE_NLS
|
||||||
|
@ -363,7 +363,7 @@ private:
|
|||||||
|
|
||||||
if (Security::hideMetatables ())
|
if (Security::hideMetatables ())
|
||||||
{
|
{
|
||||||
lua_pushnil (L);
|
lua_pushboolean (L, false);
|
||||||
rawsetfield (L, -2, "__metatable");
|
rawsetfield (L, -2, "__metatable");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -400,7 +400,7 @@ private:
|
|||||||
|
|
||||||
if (Security::hideMetatables ())
|
if (Security::hideMetatables ())
|
||||||
{
|
{
|
||||||
lua_pushnil (L);
|
lua_pushboolean (L, false);
|
||||||
rawsetfield (L, -2, "__metatable");
|
rawsetfield (L, -2, "__metatable");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -442,7 +442,7 @@ private:
|
|||||||
|
|
||||||
if (Security::hideMetatables ())
|
if (Security::hideMetatables ())
|
||||||
{
|
{
|
||||||
lua_pushnil (L);
|
lua_pushboolean (L, false);
|
||||||
rawsetfield (L, -2, "__metatable");
|
rawsetfield (L, -2, "__metatable");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1161,8 +1161,14 @@ private:
|
|||||||
lua_setfield(L, -2, "__index");
|
lua_setfield(L, -2, "__index");
|
||||||
lua_pushcclosure (L, CFunc::array_newindex<T>, 0);
|
lua_pushcclosure (L, CFunc::array_newindex<T>, 0);
|
||||||
lua_setfield(L, -2, "__newindex");
|
lua_setfield(L, -2, "__newindex");
|
||||||
|
if (Security::hideMetatables ())
|
||||||
|
{
|
||||||
|
lua_pushboolean (L, false);
|
||||||
|
rawsetfield (L, -2, "__metatable");
|
||||||
|
}
|
||||||
lua_pop (L, 1);
|
lua_pop (L, 1);
|
||||||
|
|
||||||
|
|
||||||
createConstTable (name);
|
createConstTable (name);
|
||||||
lua_pushcfunction (L, &CFunc::gcMetaMethod <T>);
|
lua_pushcfunction (L, &CFunc::gcMetaMethod <T>);
|
||||||
rawsetfield (L, -2, "__gc");
|
rawsetfield (L, -2, "__gc");
|
||||||
@ -1532,6 +1538,12 @@ private:
|
|||||||
lua_pushcfunction (L, &tostringMetaMethod);
|
lua_pushcfunction (L, &tostringMetaMethod);
|
||||||
rawsetfield (L, -2, "__tostring");
|
rawsetfield (L, -2, "__tostring");
|
||||||
#endif
|
#endif
|
||||||
|
if (Security::hideMetatables ())
|
||||||
|
{
|
||||||
|
lua_pushboolean (L, false);
|
||||||
|
rawsetfield (L, -2, "__metatable");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user