Project

General

Profile

Bug #3229

iseq_s_load で TypeError 発生

Added by nagachika (Tomoyuki Chikanaga) about 10 years ago. Updated about 9 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
-
ruby -v:
ruby 1.9.2dev (2010-04-30 trunk 27566) [x86_64-darwin10.3.0]
Backport:

Description

=begin
[ruby-dev:40911] をチケットにさせて頂きます。

RubyGems の iseq ライブラリを利用して、文字列から compile した ISeq をロードさせようとすると
以下のように TypeError が発生します。

$ cat test.rb
require "iseq"

iseq = ISeq.compile("pust 'Hello World'")
ISeq.load(iseq.to_a)
$ ruby -v test.rb
ruby 1.9.2dev (2010-04-30 trunk 27566) [x86_64-darwin10.3.0]
test.rb:4:in load': can't convert nil into String (TypeError)
from test.rb:4:in
'

iseq->filepath が nil の場合があるのに対応していないようです。
以下のパッチで上記のコードは動くようになりました。

Index: iseq.c
===================================================================
--- iseq.c (revision 27566)
+++ iseq.c (working copy)
@@ -465,7 +465,8 @@

  name        = CHECK_STRING(rb_ary_entry(data, i++));
  filename    = CHECK_STRING(rb_ary_entry(data, i++));
  • filepath = CHECK_STRING(rb_ary_entry(data, i++));
  • filepath = rb_ary_entry(data, i++);
  • filepath = NIL_P(filepath) ? Qnil : CHECK_STRING(filepath);
    line_no = CHECK_INTEGER(rb_ary_entry(data, i++));

    type = CHECK_SYMBOL(rb_ary_entry(data, i++));
    =end

#1

Updated by wanabe (_ wanabe) about 10 years ago

=begin
ワナベと申します。

RubyGems の iseq ライブラリを利用して、文字列から compile した ISeq をロードさせようとすると
以下のように TypeError が発生します。
(中略)
iseq->filepath が nil の場合があるのに対応していないようです。
以下のパッチで上記のコードは動くようになりました。

iseq ライブラリをお試し頂きありがとうございます。バグ出しもありがとうございます。
VM 関連ではありますが、パッチは自明であり、かつ影響範囲はごく限られていますので
特に議論等を待つことなく取り込ませていただきます。
=end

#2

Updated by wanabe (_ wanabe) about 10 years ago

  • Status changed from Open to Closed

=begin
r27582 (および r27583)で適用させていただきました。ありがとうございました。
=end

Also available in: Atom PDF