Bug #3229
closediseq_s_load で TypeError 発生
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
Updated by wanabe (_ wanabe) almost 14 years ago
=begin
ワナベと申します。
RubyGems の iseq ライブラリを利用して、文字列から compile した ISeq をロードさせようとすると
以下のように TypeError が発生します。
(中略)
iseq->filepath が nil の場合があるのに対応していないようです。
以下のパッチで上記のコードは動くようになりました。
iseq ライブラリをお試し頂きありがとうございます。バグ出しもありがとうございます。
VM 関連ではありますが、パッチは自明であり、かつ影響範囲はごく限られていますので
特に議論等を待つことなく取り込ませていただきます。
=end
Updated by wanabe (_ wanabe) almost 14 years ago
- Status changed from Open to Closed
=begin
r27582 (および r27583)で適用させていただきました。ありがとうございました。
=end