Actions
Backport #4377
closedpopen("-") で、乱数が初期化されない
Status:
Closed
Assignee:
Description
=begin
昨日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 で一緒に直ります。
=end
Actions
Like0
Like0Like0