]> git.ipfire.org Git - thirdparty/LuaJIT.git/commitdiff
Avoid stack resizes while recording calls to vararg functions.
authorMike Pall <mike>
Wed, 8 Dec 2010 18:11:58 +0000 (19:11 +0100)
committerMike Pall <mike>
Wed, 8 Dec 2010 18:11:58 +0000 (19:11 +0100)
FUNCV might have been recorded twice (with ill effects).

src/lj_dispatch.c

index 80a6ef2f4ed0ce7bdba95bfdd6fc0a3ddc0293a2..4eb6033b0cb791529309d929a77bec195c8895a0 100644 (file)
@@ -388,9 +388,12 @@ void LJ_FASTCALL lj_dispatch_ins(lua_State *L, const BCIns *pc)
 static int call_init(lua_State *L, GCfunc *fn)
 {
   if (isluafunc(fn)) {
-    int numparams = funcproto(fn)->numparams;
+    GCproto *pt = funcproto(fn);
+    int numparams = pt->numparams;
     int gotparams = (int)(L->top - L->base);
-    lj_state_checkstack(L, (MSize)numparams);
+    int need = pt->framesize;
+    if ((pt->flags & PROTO_IS_VARARG)) need += 1+gotparams;
+    lj_state_checkstack(L, (MSize)need);
     numparams -= gotparams;
     return numparams >= 0 ? numparams : 0;
   } else {