aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pall <mike>2023-07-09 21:08:12 +0200
committerMike Pall <mike>2023-07-09 21:08:12 +0200
commita01cba9d2d74efc57376822aa43db2d5043af5a4 (patch)
tree99946adbf5b302535bc607c2fe226862e8244294
parent94ada59628dd6ce5d6d2dad1d35a68ad30127f53 (diff)
downloadluajit-a01cba9d2d74efc57376822aa43db2d5043af5a4.tar.gz
luajit-a01cba9d2d74efc57376822aa43db2d5043af5a4.tar.bz2
luajit-a01cba9d2d74efc57376822aa43db2d5043af5a4.zip
Fix maxslots when recording BC_VARG, part 2.
Analyzed by Sergey Kaplun. #1024
-rw-r--r--src/lj_record.c8
1 files changed, 2 insertions, 6 deletions
diff --git a/src/lj_record.c b/src/lj_record.c
index c9933968..6361b424 100644
--- a/src/lj_record.c
+++ b/src/lj_record.c
@@ -1518,12 +1518,8 @@ static void rec_varg(jit_State *J, BCReg dst, ptrdiff_t nresults)
1518 if (J->framedepth > 0) { /* Simple case: varargs defined on-trace. */ 1518 if (J->framedepth > 0) { /* Simple case: varargs defined on-trace. */
1519 ptrdiff_t i; 1519 ptrdiff_t i;
1520 if (nvararg < 0) nvararg = 0; 1520 if (nvararg < 0) nvararg = 0;
1521 if (nresults == -1) { 1521 if (nresults == -1) nresults = nvararg;
1522 nresults = nvararg; 1522 J->maxslot = dst + (BCReg)nresults;
1523 J->maxslot = dst + (BCReg)nvararg;
1524 } else if (dst + nresults > J->maxslot) {
1525 J->maxslot = dst + (BCReg)nresults;
1526 }
1527 if (J->baseslot + J->maxslot >= LJ_MAX_JSLOTS) 1523 if (J->baseslot + J->maxslot >= LJ_MAX_JSLOTS)
1528 lj_trace_err(J, LJ_TRERR_STACKOV); 1524 lj_trace_err(J, LJ_TRERR_STACKOV);
1529 for (i = 0; i < nresults; i++) 1525 for (i = 0; i < nresults; i++)