diff --git a/rpmio/rpmlua.c b/rpmio/rpmlua.c index ebf7cd3358..892802c01b 100644 --- a/rpmio/rpmlua.c +++ b/rpmio/rpmlua.c @@ -299,6 +299,18 @@ int rpmluaRunScript(rpmlua _lua, const char *script, const char *name, goto exit; } + /* Create new, private environment */ + lua_newtable(L); + + /* Set it to inherit global environment via a metatable */ + lua_newtable(L); + lua_getglobal(L, "_G"); + lua_setfield(L, -2, "__index"); + lua_setmetatable(L, -2); + + /* Set as _ENV in the loaded buffer */ + lua_setupvalue(L, -2, 1); + lua_newtable(L); if (opts) { int argc = argvCount(args); diff --git a/tests/rpmmacro.at b/tests/rpmmacro.at index 072b986be9..6705f04e01 100644 --- a/tests/rpmmacro.at +++ b/tests/rpmmacro.at @@ -568,6 +568,24 @@ runroot rpm --eval '%{lua:print(5*5)}' ]) AT_CLEANUP +AT_SETUP([lua environment]) +AT_KEYWORDS([macros lua]) +AT_CHECK([ +AT_SKIP_IF([$LUA_DISABLED]) +runroot rpm \ + --eval '%{lua:r=5; print(r == nil)}' \ + --eval '%{lua: print(r == nil)}' \ + --eval '%{lua:rpm=nil; print(rpm == nil)}' \ + --eval '%{lua: print(rpm == nil)}' +], +[0], +[false +true +false +false +]) +AT_CLEANUP + AT_SETUP([lua macro arguments]) AT_KEYWORDS([macros lua]) AT_CHECK([[