diff options
author | Mike Pall <mike> | 2021-06-14 14:56:54 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2021-06-14 14:56:54 +0200 |
commit | 3f9389edc6cdf3f78a6896d550c236860aed62b2 (patch) | |
tree | 7483b4d8b8a612a8bec05863684a55d07025dcd1 /src | |
parent | c1c4c5599cb32dd9a39af55f9dc953f8e1bf9ddc (diff) | |
download | luajit-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.c | 4 |
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); |