From: Motohiro KOSAKI Date: 2011-02-07T20:05:12+09:00 Subject: [ruby-dev:43178] [Backport92-Backport#4377][Open] popen("-") で、乱数が初期化されない Backport #4377: popen("-") で、乱数が初期化されない http://redmine.ruby-lang.org/issues/show/4377 起票者: Motohiro KOSAKI ステータス: Open, 優先度: Normal 担当者: Yuki Sonoda, カテゴリ: 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 で一緒に直ります。 ---------------------------------------- http://redmine.ruby-lang.org