From: Hidetoshi Nagai Date: 2009-07-12T00:03:33+09:00 Subject: [ruby-dev:38760] [Bug #1763] SecurityError on an Exception object because of modification of instance variable #__ThrowState__ Bug #1763: SecurityError on an Exception object because of modification of instance variable #__ThrowState__ http://redmine.ruby-lang.org/issues/show/1763 起票者: Hidetoshi Nagai ステータス: Open, 優先度: Normal ruby -v: ruby 1.9.2dev (2009-07-08) [i686-linux] 以下ような例で,例外オブジェクトのインスタンス変数 (#__ThrowState__) 操作の SecurityError となり,適切な例外状況を捉えることができません. ----------------------------------------------------------------------- cmd = proc{p "cmd: safe_level == #{$SAFE}"; raise SystemExit} safe0_p = proc{|*args| p args} proc{ $SAFE = 4 begin cmd.call rescue SystemExit => e safe0_p["SystemExit: #{e.inspect}"] raise e rescue Exception => e safe0_p["Exception (NOT SystemExit): #{e.inspect}"] raise e end }.call ----------------------------------------------------------------------- vm.c の vm_exec() の中で設定しようとしているため,ユーザによる対処が極めて困難です. 例外オブジェクトに untrust 設定しようにも, $SAFE==0 の cmd から見て外側の safe level は分かりませんから untrust すべきかどうか判断できませんし, その外側は $SAFE==4 ですので untrust 設定する権限がありません. ---------------------------------------- http://redmine.ruby-lang.org