From 4f19a15bd9dfbd4e5c3ffc6a70b72449fb79a7ee Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Wed, 10 Mar 2010 22:13:23 +0100 Subject: Fix potential hang in UCLO redirection handling in hooks. --- src/lj_dispatch.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/lj_dispatch.c b/src/lj_dispatch.c index f956aa1b..30137ab2 100644 --- a/src/lj_dispatch.c +++ b/src/lj_dispatch.c @@ -333,15 +333,13 @@ static void callhook(lua_State *L, int event, BCLine line) static BCReg cur_topslot(GCproto *pt, const BCIns *pc, uint32_t nres) { BCIns ins = pc[-1]; - for (;;) { - switch (bc_op(ins)) { - case BC_UCLO: ins = pc[bc_j(ins)]; break; - case BC_CALLM: - case BC_CALLMT: return bc_a(ins) + bc_c(ins) + nres-1+1; - case BC_RETM: return bc_a(ins) + bc_d(ins) + nres-1; - case BC_TSETM: return bc_a(ins) + nres-1; - default: return pt->framesize; - } + if (bc_op(ins) == BC_UCLO) + ins = pc[bc_j(ins)]; + switch (bc_op(ins)) { + case BC_CALLM: case BC_CALLMT: return bc_a(ins) + bc_c(ins) + nres-1+1; + case BC_RETM: return bc_a(ins) + bc_d(ins) + nres-1; + case BC_TSETM: return bc_a(ins) + nres-1; + default: return pt->framesize; } } -- cgit v1.2.3-55-g6feb