summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-08-22 00:02:59 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-08-22 00:02:59 +0000
commit36b9a37a80d2b740c49b8d7e35572ade2c2b7fa4 (patch)
tree10929e2c0406f92fec7ad5656058f2f909688ed8
parent02a30129a1883a7817e9ab2f6e70f48a2bcbc3e5 (diff)
iseq.c: undef allocator
* iseq.c (Init_ISeq): undefine allocator of InstructionSequence, to get rid of segfaults at method call on uninitialized object. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55981 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--iseq.c1
-rw-r--r--test/ruby/test_iseq.rb4
3 files changed, 10 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index af89f9bbda..cb2ace44c4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Mon Aug 22 09:02:56 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * iseq.c (Init_ISeq): undefine allocator of InstructionSequence,
+ to get rid of segfaults at method call on uninitialized object.
+
Sat Aug 21 05:47:00 2016 Kenta Murata <mrkn@mrkn.jp>
* enum.c (enum_sort): prevent wasteful array duplication.
diff --git a/iseq.c b/iseq.c
index 93be1ed956..b6b31c052f 100644
--- a/iseq.c
+++ b/iseq.c
@@ -2419,6 +2419,7 @@ Init_ISeq(void)
{
/* declare ::RubyVM::InstructionSequence */
rb_cISeq = rb_define_class_under(rb_cRubyVM, "InstructionSequence", rb_cObject);
+ rb_undef_alloc_func(rb_cISeq);
rb_define_method(rb_cISeq, "inspect", iseqw_inspect, 0);
rb_define_method(rb_cISeq, "disasm", iseqw_disasm, 0);
rb_define_method(rb_cISeq, "disassemble", iseqw_disasm, 0);
diff --git a/test/ruby/test_iseq.rb b/test/ruby/test_iseq.rb
index cdfa380edd..94aebe1f90 100644
--- a/test/ruby/test_iseq.rb
+++ b/test/ruby/test_iseq.rb
@@ -19,6 +19,10 @@ class TestISeq < Test::Unit::TestCase
body.find_all{|e| e.kind_of? Integer}
end
+ def test_allocate
+ assert_raise(TypeError) {ISeq.allocate}
+ end
+
def test_to_a_lines
src = <<-EOS
p __LINE__ # 1