summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2015-06-29 10:27:09 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2015-06-29 10:27:09 +0900
commitb0ec992d4170ed06bd96020edbc889a224b23be1 (patch)
treef7fafd35a4f24a1c66fb88546401f87398b1b4c3
parent96d6e45acde2ba836aebacfbf200818c7e2db357 (diff)
parenta41f5eb23fad13ce8037050b7a2331c1c7dd9e6f (diff)
downloadmruby-b0ec992d4170ed06bd96020edbc889a224b23be1.tar.gz
mruby-b0ec992d4170ed06bd96020edbc889a224b23be1.zip
Merge pull request #2866 from jurriaan/fix-crash
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;