From 002d5626e0e717a77c8cdb18ee22043defce1817 Mon Sep 17 00:00:00 2001 From: antirez Date: Tue, 27 Sep 2011 18:46:23 +0200 Subject: [PATCH] Scripting engine now only loads selected libraries, using code originally contributed by @loopole. --- src/scripting.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/scripting.c b/src/scripting.c index f62e5c29..08151710 100644 --- a/src/scripting.c +++ b/src/scripting.c @@ -265,9 +265,28 @@ void luaMaskCountHook(lua_State *lua, lua_Debug *ar) { } } +void luaLoadLib(lua_State *lua, const char *libname, lua_CFunction luafunc) { + lua_pushcfunction(lua, luafunc); + lua_pushstring(lua, libname); + lua_call(lua, 1, 0); +} + +void luaLoadLibraries(lua_State *lua) { + luaLoadLib(lua, "", luaopen_base); + luaLoadLib(lua, LUA_TABLIBNAME, luaopen_table); + luaLoadLib(lua, LUA_STRLIBNAME, luaopen_string); + luaLoadLib(lua, LUA_MATHLIBNAME, luaopen_math); + luaLoadLib(lua, LUA_DBLIBNAME, luaopen_debug); + +#if 0 /* Stuff that we don't load currently, for sandboxing concerns. */ + luaLoadLib(lua, LUA_LOADLIBNAME, luaopen_package); + luaLoadLib(lua, LUA_OSLIBNAME, luaopen_os); +#endif +} + void scriptingInit(void) { lua_State *lua = lua_open(); - luaL_openlibs(lua); + luaLoadLibraries(lua); /* Initialize a dictionary we use to map SHAs to scripts. * This is useful for replication, as we need to replicate EVALSHA -- GitLab