[Backport92-Backport#4377][Open] popen("-") で、乱数が初期化されない

Backport #4377: popen(“-”) で、乱数が初期化されない
http://redmine.ruby-lang.org/issues/show/4377

起票者: Motohiro KOSAKI
ステータス: Open, 優先度: Normal
担当者: Yuki S., カテゴリ: core

昨日akrさんと雑談していて、ふと思い出したので記録のためにチケット化しておきます。
現在、CVE-2003-0900対策としてfork時にはrandom seedを再初期化する(よって親子で
ちがう乱数を生成する)のがRubyの仕様です。

% ruby-192 -ve ’ pid=fork(); if pid.nil? then puts rand(); exit end;
puts rand()’
ruby 1.9.2p174 (2011-01-28 revision 30696) [x86_64-linux]
0.908191694240406
0.08498496553239665

しかしながら、forkの親戚のpopen(“-”)ではこの処理が抜けているので、うっかりサーバー系で
popenすると危険です。

% ruby-192 -ve ’ io = IO.popen(“-”); if io.nil? then puts rand(); exit
end; puts io.gets(); puts rand()’
ruby 1.9.2p174 (2011-01-28 revision 30696) [x86_64-linux]
0.3744795359283313
0.3744795359283313

[Bug #4121][ruby-dev:42686] の障害対応で入れた r30364 で一緒に直ります。