西山和広です。

Etc.passwdがマルチスレッドセーフではありません。
またsafe levelも考慮されていません。
Etc.groupも同様だと思います。


require 'etc'
a1=[]
th = Thread.new{
  Etc.passwd do |a|
    a1.push a
    Thread.pass
  end
}
a2=[].taint
Thread.new{
  $SAFE=4
  Etc.passwd do |a|
    a2.push a
    Thread.pass
  end
}.value
th.join
p a1 != a2 #=> true


-- 
|ZnZ(ゼット エヌ ゼット)
|西山和広(Kazuhiro NISHIYAMA)