From 3f9389edc6cdf3f78a6896d550c236860aed62b2 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Mon, 14 Jun 2021 14:56:54 +0200 Subject: [PATCH] Throw any errors before stack changes in trace stitching. Thanks to doujiang24. --- src/lj_ffrecord.c | 4 ++++ 1 file changed, 4 insertions(+) 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) const BCIns *pc = frame_pc(base-1); TValue *pframe = frame_prevl(base-1); + /* Check for this now. Throwing in lj_record_stop messes up the stack. */ + if (J->cur.nsnap >= (MSize)J->param[JIT_P_maxsnap]) + lj_trace_err(J, LJ_TRERR_SNAPOV); + /* Move func + args up in Lua stack and insert continuation. */ memmove(&base[1], &base[-1-LJ_FR2], sizeof(TValue)*nslot); setframe_ftsz(nframe, ((char *)nframe - (char *)pframe) + FRAME_CONT);