なかだです。

At Thu, 23 Oct 2003 18:12:38 +0900,
Hidetoshi NAGAI wrote:
>    ENV
>    RUBY_PLATFORM  (PLATFORM)
>    $LOAD_PATH     ($:, $-I)
> 
> のすべてにおいて,$SAFE >= 4 でのアクセスに制約がかかります.
> RUBY_PLATFORM (PLATFORM) は $SAFE >= 4 では nil が返ります.

制限されるのはトップレベルの定数だけのようですが、ネストしたも
のは大丈夫なんでしょうか。

こういう感じのものを考えていたんですが…。

# secure_const.rb

class Module
  def secure_const(id, safe = 4)
    raise ArgumentError, "#{safe} must be 0..4" unless (0..4) === safe
    raise SecurityError, "#{safe}" if safe < $SAFE
    (@secure_consts ||= {})[id] = [safe, remove_const(id)]
  end

  def const_missing(id)
    safe, val = @secure_consts[id]
    if safe
      $SAFE < safe or raise SecurityError, id.to_s
      val
    else
      super
    end
  end
end

if $0 == __FILE__
  class Object
    secure_const(:RUBY_PLATFORM)
  end

  5.times do |$SAFE|
    p RUBY_PLATFORM
  end
end

-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦