From: Kazuhiro NISHIYAMA Date: 2008-08-03T01:38:40+09:00 Subject: [ruby-dev:35739] Re: $SAFE=4の場合のReadline::HISTORY.each 西山和広です。 At Sat, 2 Aug 2008 00:50:00 +0900, Takao Kouji wrote: > > なお、現在、$SAFE が 4 の場合に > each メソッドをブロックなしで呼び出すことはできますが、 > 返り値の Enumerable::Enumerator に対してメソッド呼び出しをすると、 > 例外 SecurityError が発生します。 > このため、例外が発生するタイミングが遅いというだけで、 > 実害はないと考えています。 > > 以下の例では、パッチ適用後は(1)で例外が発生し、 > パッチ適用前は(2)で例外が発生します。 > > require "readline" > Readline::HISTORY.push("a", "b", "c") > $SAFE = 4 > e = Readline::HISTORY.each # (1) > e.each do |s| # (2) > p s > end require "readline" Readline::HISTORY.push("a", "b", "c") e = nil proc { $SAFE = 4 e = Readline::HISTORY.each # (1) }.call e.each do |s| # (2) p s end のような場合の挙動が変わりそうです。 -- |ZnZ(ゼット エヌ ゼット) |西山和広(Kazuhiro NISHIYAMA)