diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | iseq.c | 5 | ||||
-rw-r--r-- | test/ruby/test_iseq.rb | 11 |
3 files changed, 20 insertions, 2 deletions
@@ -1,3 +1,9 @@ +Sat Jan 14 21:56:43 2012 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * iseq.c (iseq_data_to_ary): check line info table boundary. line + number 0 means no line number info is needed. [ruby-dev:45130] + [Bug #5894] + Sat Jan 14 18:24:13 2012 CHIKANAGA Tomoyuki <nagachika00@gmail.com> * error.c (exc_equal): clear rb_thread_t::errinfo when ignore @@ -1104,7 +1104,8 @@ cdhash_each(VALUE key, VALUE value, VALUE ary) static VALUE iseq_data_to_ary(rb_iseq_t *iseq) { - long i, ti; + long i; + size_t ti; unsigned int pos; unsigned int line = 0; VALUE *seq; @@ -1315,7 +1316,7 @@ iseq_data_to_ary(rb_iseq_t *iseq) rb_ary_push(body, (VALUE)label); } - if (iseq->line_info_table[ti].position == pos) { + if (iseq->line_info_size < ti && iseq->line_info_table[ti].position == pos) { line = iseq->line_info_table[ti].line_no; rb_ary_push(body, INT2FIX(line)); ti++; diff --git a/test/ruby/test_iseq.rb b/test/ruby/test_iseq.rb new file mode 100644 index 0000000000..2b25630e57 --- /dev/null +++ b/test/ruby/test_iseq.rb @@ -0,0 +1,11 @@ +require 'test/unit' +require_relative 'envutil' + +class TestISeq < Test::Unit::TestCase + ISeq = RubyVM::InstructionSequence + + def test_no_linenum + bug5894 = '[ruby-dev:45130]' + assert_normal_exit('p RubyVM::InstructionSequence.compile("1", "mac", "", 0).to_a', bug5894) + end +end |