1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* iseq.c (iseq_s_disasm): fix a bug that may cause SEGV.

* test/ruby/test_method.rb (test_body): add a test for the above change.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@33013 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
ktsj 2011-08-20 04:26:20 +00:00
parent 4536f22a69
commit 5cb16a55f5
3 changed files with 10 additions and 3 deletions

View file

@ -1,3 +1,9 @@
Sat Aug 20 13:19:52 2011 Kazuki Tsujimoto <kazuki@callcc.net>
* iseq.c (iseq_s_disasm): fix a bug that may cause SEGV.
* test/ruby/test_method.rb (test_body): add a test for the above change.
Sat Aug 20 10:43:24 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
* ext/stringio/stringio.c (strio_read): return new string if nil

6
iseq.c
View file

@ -1030,9 +1030,9 @@ iseq_s_disasm(VALUE klass, VALUE body)
rb_proc_t *proc;
VALUE iseqval;
GetProcPtr(body, proc);
iseqval = proc->block.iseq->self;
if (RUBY_VM_NORMAL_ISEQ_P(iseqval)) {
ret = rb_iseq_disasm(iseqval);
iseq = proc->block.iseq;
if (RUBY_VM_NORMAL_ISEQ_P(iseq)) {
ret = rb_iseq_disasm(iseq->self);
}
}
else if ((iseq = rb_method_get_iseq(body)) != 0) {

View file

@ -123,6 +123,7 @@ class TestMethod < Test::Unit::TestCase
def o.foo; end
assert_nothing_raised { RubyVM::InstructionSequence.disasm(o.method(:foo)) }
assert_nothing_raised { RubyVM::InstructionSequence.disasm("x".method(:upcase)) }
assert_nothing_raised { RubyVM::InstructionSequence.disasm(method(:to_s).to_proc) }
end
def test_new