aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2021-06-14 14:56:54 +0200
committerMike Pall <mike>2021-06-14 14:56:54 +0200
commit3f9389edc6cdf3f78a6896d550c236860aed62b2 (patch)
tree7483b4d8b8a612a8bec05863684a55d07025dcd1 /src
parentc1c4c5599cb32dd9a39af55f9dc953f8e1bf9ddc (diff)
downloadluajit-3f9389edc6cdf3f78a6896d550c236860aed62b2.tar.gz
luajit-3f9389edc6cdf3f78a6896d550c236860aed62b2.tar.bz2
luajit-3f9389edc6cdf3f78a6896d550c236860aed62b2.zip
Throw any errors before stack changes in trace stitching.
Thanks to doujiang24.
Diffstat (limited to 'src')
-rw-r--r--src/lj_ffrecord.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/lj_ffrecord.c b/src/lj_ffrecord.c
index d050d12d..26af7d84 100644
--- a/src/lj_ffrecord.c
+++ b/src/lj_ffrecord.c
@@ -107,6 +107,10 @@ static void recff_stitch(jit_State *J)
107 const BCIns *pc = frame_pc(base-1); 107 const BCIns *pc = frame_pc(base-1);
108 TValue *pframe = frame_prevl(base-1); 108 TValue *pframe = frame_prevl(base-1);
109 109
110 /* Check for this now. Throwing in lj_record_stop messes up the stack. */
111 if (J->cur.nsnap >= (MSize)J->param[JIT_P_maxsnap])
112 lj_trace_err(J, LJ_TRERR_SNAPOV);
113
110 /* Move func + args up in Lua stack and insert continuation. */ 114 /* Move func + args up in Lua stack and insert continuation. */
111 memmove(&base[1], &base[-1-LJ_FR2], sizeof(TValue)*nslot); 115 memmove(&base[1], &base[-1-LJ_FR2], sizeof(TValue)*nslot);
112 setframe_ftsz(nframe, ((char *)nframe - (char *)pframe) + FRAME_CONT); 116 setframe_ftsz(nframe, ((char *)nframe - (char *)pframe) + FRAME_CONT);