summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJurriaan Pruis <[email protected]>2015-06-28 13:30:03 +0200
committerJurriaan Pruis <[email protected]>2015-06-28 13:46:23 +0200
commita41f5eb23fad13ce8037050b7a2331c1c7dd9e6f (patch)
treeb67b5866876a65a1f087afd7f92882242157fd22
parentf39a31a62352f15b6c26a457bae576231dec1b82 (diff)
downloadmruby-a41f5eb23fad13ce8037050b7a2331c1c7dd9e6f.tar.gz
mruby-a41f5eb23fad13ce8037050b7a2331c1c7dd9e6f.zip
Fix segfault found using afl-fuzz
-rw-r--r--mrbgems/mruby-compiler/core/codegen.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c
index d2eeef203..cefde8b7b 100644
--- a/mrbgems/mruby-compiler/core/codegen.c
+++ b/mrbgems/mruby-compiler/core/codegen.c
@@ -2652,13 +2652,17 @@ loop_break(codegen_scope *s, node *tree)
}
loop = s->loop;
- while (loop->type == LOOP_BEGIN) {
+ while (loop && loop->type == LOOP_BEGIN) {
genop_peep(s, MKOP_A(OP_POPERR, 1), NOVAL);
loop = loop->prev;
}
- while (loop->type == LOOP_RESCUE) {
+ while (loop && loop->type == LOOP_RESCUE) {
loop = loop->prev;
}
+ if (!loop) {
+ codegen_error(s, "unexpected break");
+ }
+
if (loop->type == LOOP_NORMAL) {
int tmp;