From: Akio Tajima Date: 2010-10-11T04:03:47+09:00 Subject: [ruby-dev:42356] [Ruby 1.9-Bug#3925][Open] setting Tempfile/StringIO to $std* before startup causes [BUG] Segmentation fault Bug #3925: setting Tempfile/StringIO to $std* before startup causes [BUG] Segmentation fault http://redmine.ruby-lang.org/issues/show/3925 起票者: Akio Tajima ステータス: Open, 優先度: Normal カテゴリ: core, Target version: 1.9.x ruby -v: ruby 1.9.2p0 (2010-08-18 revision 29036) [i386-mswin32_100] $stdout, in, errにTempfileやStringIOをセットするライブラリを-rで読み込むと[BUG]となります。 例) #d.rb require 'stringio' $stdout = StringIO.new #--------------------------------- を作って $ruby -r./d -e 'puts "hello"' -e: [BUG] Segmentation fault ruby 1.9.2p0 (2010-08-18 revision 29036) [i386-mswin32_100] -- control frame ---------- c:0001 p:0000 s:0002 b:0002 l:00122c d:00122c TOP --------------------------- 以下のパッチで少なくともTempfileは救えます。StringIOについてはset_encodingが無いので無理ですが。 --- io.c.org Sat Jul 24 19:38:33 2010 +++ io.c Mon Oct 11 03:47:30 2010 @@ -8652,9 +8652,9 @@ rb_stdio_set_default_encoding(void) extern VALUE rb_stdin, rb_stdout, rb_stderr; VALUE val = Qnil; - rb_io_set_encoding(1, &val, rb_stdin); - rb_io_set_encoding(1, &val, rb_stdout); - rb_io_set_encoding(1, &val, rb_stderr); + rb_funcall3(rb_stdin, rb_intern("set_encoding"), 1, &val); + rb_funcall3(rb_stdout, rb_intern("set_encoding"), 1, &val); + rb_funcall3(rb_stderr, rb_intern("set_encoding"), 1, &val); } /* -rで読み込むと自動的にデバッガ付き状態で動く(ターゲットにrequireを埋め込みたくない)ライブラリを開発していて気づきました。 ---------------------------------------- http://redmine.ruby-lang.org