From: "K.Kosako" Date: 2001-04-17T17:14:37+09:00 Subject: [ruby-dev:12984] safe_getter SAFE LEVELが4以上のときに値を出力させる方法が わからなかったので、スレッドを使用した変なスクリプトに なってしまいましたが、スレッドは全く関係なくて、 要するに、SAFE LEVELをFixnumの範囲外の値に指定したときに、 $SAFEの参照値がおかしくなるというだけです。 (些細な問題ですいません。) Thread.start { Thread::main[:e] = nil while (true) do Thread::pass while Thread::main[:e] == nil eval(Thread::main[:e]) Thread::main[:e] = nil end } def ex(safe) Thread::main[:e] = sprintf("puts \"%d\"", safe) Thread::pass while Thread::main[:e] end $SAFE = 2**31-1 ex($SAFE) # => -1 --- eval.c.orig Mon Apr 16 17:38:58 2001 +++ eval.c Tue Apr 17 16:54:39 2001 @@ -6933,7 +6933,7 @@ static VALUE safe_getter() { - return INT2FIX(ruby_safe_level); + return INT2NUM(ruby_safe_level); } static void ---- 小迫@ソフネック 渋谷区恵比寿1-15-1