diff --git a/lvm.c b/lvm.c index d7000791..5d0709ef 100644 --- a/lvm.c +++ b/lvm.c @@ -1593,9 +1593,9 @@ void luaV_execute (lua_State *L, CallInfo *ci) { savepc(ci); if (TESTARG_k(i)) { int nparams1 = GETARG_C(i); + luaF_close(L, base, LUA_OK); /* there may be open upvalues */ if (nparams1) /* vararg function? */ ci->func -= ci->u.l.nextraargs + nparams1; - luaF_close(L, base, LUA_OK); /* there may be open upvalues */ } luaD_poscall(L, ci, n); return; diff --git a/testes/locals.lua b/testes/locals.lua index e59ab95a..7834d7da 100644 --- a/testes/locals.lua +++ b/testes/locals.lua @@ -276,6 +276,15 @@ do -- errors in __close assert(msg == 1) assert(log[1] == 4 and log[2] == 3 and log[3] == 2 and log[4] == 2 and #log == 4) + + -- error in toclose in vararg function + function foo (...) + local x123 = 10 + end + + local st, msg = pcall(foo) + assert(string.find(msg, "'x123'")) + end