Commit 3f2743c3 authored by Yukihiro "Matz" Matsumoto's avatar Yukihiro "Matz" Matsumoto

Merge pull request #447 from iij/pr-tailcall-oob

fix out-of-bound access on compiling empty blocks.
parents 9c3f070a 65f855b0
...@@ -9,3 +9,4 @@ Original Authors "mruby developers" are: ...@@ -9,3 +9,4 @@ Original Authors "mruby developers" are:
Yuichiro MASUI Yuichiro MASUI
Masamitsu MURASE Masamitsu MURASE
Masaki Muranaka Masaki Muranaka
Internet Initiative Japan Inc.
...@@ -511,8 +511,9 @@ for_body(codegen_scope *s, node *tree) ...@@ -511,8 +511,9 @@ for_body(codegen_scope *s, node *tree)
} }
codegen(s, tree->cdr->cdr->car, VAL); codegen(s, tree->cdr->cdr->car, VAL);
pop(); pop();
if (s->pc > 0) {
c = s->iseq[s->pc-1]; c = s->iseq[s->pc-1];
if (GET_OPCODE(c) != OP_RETURN || GETARG_B(c) != OP_R_NORMAL || s->pc == s->lastlabel) { if (GET_OPCODE(c) != OP_RETURN || GETARG_B(c) != OP_R_NORMAL || s->pc == s->lastlabel)
genop_peep(s, MKOP_AB(OP_RETURN, cursp(), OP_R_NORMAL), NOVAL); genop_peep(s, MKOP_AB(OP_RETURN, cursp(), OP_R_NORMAL), NOVAL);
} }
loop_pop(s, NOVAL); loop_pop(s, NOVAL);
...@@ -593,6 +594,7 @@ lambda_body(codegen_scope *s, node *tree, int blk) ...@@ -593,6 +594,7 @@ lambda_body(codegen_scope *s, node *tree, int blk)
} }
codegen(s, tree->cdr->car, VAL); codegen(s, tree->cdr->car, VAL);
pop(); pop();
if (s->pc > 0) {
c = s->iseq[s->pc-1]; c = s->iseq[s->pc-1];
if (GET_OPCODE(c) != OP_RETURN || GETARG_B(c) != OP_R_NORMAL || s->pc == s->lastlabel) { if (GET_OPCODE(c) != OP_RETURN || GETARG_B(c) != OP_R_NORMAL || s->pc == s->lastlabel) {
if (s->nregs == 0) { if (s->nregs == 0) {
...@@ -603,6 +605,7 @@ lambda_body(codegen_scope *s, node *tree, int blk) ...@@ -603,6 +605,7 @@ lambda_body(codegen_scope *s, node *tree, int blk)
genop_peep(s, MKOP_AB(OP_RETURN, cursp(), OP_R_NORMAL), NOVAL); genop_peep(s, MKOP_AB(OP_RETURN, cursp(), OP_R_NORMAL), NOVAL);
} }
} }
}
if (blk) { if (blk) {
loop_pop(s, NOVAL); loop_pop(s, NOVAL);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment