summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-compiler/core
diff options
context:
space:
mode:
authorBouke van der Bijl <[email protected]>2016-11-18 16:17:40 -0500
committerBouke van der Bijl <[email protected]>2016-11-24 09:54:18 -0500
commit73e4f069becaf69707b990d658b34155f8973508 (patch)
tree38cfdf461e9167da70dea3dd60093fa009dd3048 /mrbgems/mruby-compiler/core
parenta630c4f413f6af764e68210430e8b61a435d38d7 (diff)
downloadmruby-73e4f069becaf69707b990d658b34155f8973508.tar.gz
mruby-73e4f069becaf69707b990d658b34155f8973508.zip
Fix nested empty heredoc causing segfault
As reported by https://hackerone.com/jpenalbae
Diffstat (limited to 'mrbgems/mruby-compiler/core')
-rw-r--r--mrbgems/mruby-compiler/core/codegen.c6
-rw-r--r--mrbgems/mruby-compiler/core/parse.y2
2 files changed, 6 insertions, 2 deletions
diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c
index 0c84dd558..13091a6f5 100644
--- a/mrbgems/mruby-compiler/core/codegen.c
+++ b/mrbgems/mruby-compiler/core/codegen.c
@@ -2285,7 +2285,11 @@ codegen(codegen_scope *s, node *tree, int val)
if (val) {
node *n = tree;
- if (!n) break;
+ if (!n) {
+ genop(s, MKOP_A(OP_LOADNIL, cursp()));
+ push();
+ break;
+ }
codegen(s, n->car, VAL);
n = n->cdr;
while (n) {
diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y
index 0ff7d819c..c44669f45 100644
--- a/mrbgems/mruby-compiler/core/parse.y
+++ b/mrbgems/mruby-compiler/core/parse.y
@@ -6541,7 +6541,7 @@ mrb_parser_dump(mrb_state *mrb, node *tree, int offset)
case NODE_HEREDOC:
printf("NODE_HEREDOC (<<%s):\n", ((parser_heredoc_info*)tree)->term);
- mrb_parser_dump(mrb, ((parser_heredoc_info*)tree)->doc, offset+1);
+ dump_recur(mrb, ((parser_heredoc_info*)tree)->doc, offset+1);
break;
default: