summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-12-16 01:14:20 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-12-16 01:14:20 +0000
commit389ea73014d8e7ed67ca289679d4aa50a375a5ef (patch)
tree48bce20cd541ea89e5052741b23788df449702a4
parent9aeb74d0de8004440ddd50f1c20417d44b742ecd (diff)
compile.c: check funcptr
* compile.c (iseq_build_from_ary_body): cannot load dumped funcptr. * iseq.c (iseq_data_to_ary): cannot dump funcptr. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48857 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--compile.c1
-rw-r--r--iseq.c3
2 files changed, 4 insertions, 0 deletions
diff --git a/compile.c b/compile.c
index 9230935819..a6ce631513 100644
--- a/compile.c
+++ b/compile.c
@@ -5950,6 +5950,7 @@ iseq_build_from_ary_body(rb_iseq_t *iseq, LINK_ANCHOR *anchor,
}
break;
case TS_FUNCPTR:
+ if (!RTEST(op)) rb_raise(rb_eArgError, "cannot load funcptr");
argv[j] = op;
break;
default:
diff --git a/iseq.c b/iseq.c
index de304906fe..297299e00a 100644
--- a/iseq.c
+++ b/iseq.c
@@ -1973,6 +1973,9 @@ iseq_data_to_ary(rb_iseq_t *iseq)
rb_ary_push(ary, val);
}
break;
+ case TS_FUNCPTR:
+ rb_ary_push(ary, Qnil);
+ break;
default:
rb_bug("unknown operand: %c", insn_op_type(insn, j));
}