なかだです。

At Sat, 15 Mar 2008 12:43:25 +0900,
rubikitch / ruby-lang.org wrote in [ruby-dev:34059]:
> $stdoutに別のオブジェクトを指定した場合、putsでSEGVります。
> Ruby 1.9.0では大丈夫です。

スタックオーバーフローしてますね。原因は、r15564でKernel#putsが
$stdout.putsを呼ぶようになったのですが、このLoggerはputsメソッド
を持っていないのでKernel#putsがまた呼ばれることになるためです。

> class Logger
>   def write(obj)
>     STDOUT.print Time.now.strftime("%Y/%m/%d %H:%M:%S:"), obj
>   end
> end
> $stdout = Logger.new

対応としては二つほど思い付きますが、どうしましょうか。

1. r15564をrevertする。

2. $stdoutの仕様を変えて、writeだけでなくputs,putcも定義必須にす
   る。Kernel#putsを呼んでしまうのを防ぐために、rb_f_putcと
   rb_f_putsではrb_funcall2ではなくrb_funcall3を使うようにする。

-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦