mirror of
https://github.com/lua/lua
synced 2026-09-29 04:35:58 +03:00
Bug: finalizers can be called with an invalid stack
The call to 'checkstackGC' can run finalizers, which will find an inconsistent CallInfo, as 'ci' is half updated at the point of call.
This commit is contained in:
parent
066e0f93c4
commit
cf613cdc6f
1 changed files with 1 additions and 1 deletions
2
ldo.c
2
ldo.c
|
|
@ -530,10 +530,10 @@ int luaD_pretailcall (lua_State *L, CallInfo *ci, StkId func,
|
|||
int fsize = p->maxstacksize; /* frame size */
|
||||
int nfixparams = p->numparams;
|
||||
int i;
|
||||
checkstackGCp(L, fsize - delta, func);
|
||||
ci->func -= delta; /* restore 'func' (if vararg) */
|
||||
for (i = 0; i < narg1; i++) /* move down function and arguments */
|
||||
setobjs2s(L, ci->func + i, func + i);
|
||||
checkstackGC(L, fsize);
|
||||
func = ci->func; /* moved-down function */
|
||||
for (; narg1 <= nfixparams; narg1++)
|
||||
setnilvalue(s2v(func + narg1)); /* complete missing arguments */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue