소스 검색

Fix potential hang in UCLO redirection handling in hooks.

Mike Pall 15 년 전
부모
커밋
4f19a15bd9
1개의 변경된 파일7개의 추가작업 그리고 9개의 파일을 삭제
  1. 7 9
      src/lj_dispatch.c

+ 7 - 9
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;
   }
 }