なかだです。

$SAFE > 0 のときでもset_trace_funcできてしまうのは問題になりう
るような気がします。禁止したほうがよくないでしょうか。


Index: eval.c =================================================================== RCS file: /pub/cvs/ruby/src/ruby/eval.c,v retrieving revision 1.673 diff -U2 -p -d -r1.673 eval.c --- eval.c 22 Jun 2004 14:59:25 -0000 1.673 +++ eval.c 25 Jun 2004 01:35:41 -0000 @@ -2376,4 +2376,6 @@ static int handle_rescue _((VALUE,NODE*) static void blk_free(); +static int proc_get_safe_level _((VALUE)); + static VALUE rb_obj_is_proc(proc) @@ -2434,4 +2436,5 @@ set_trace_func(obj, trace) VALUE obj, trace; { + rb_secure(1); if (NIL_P(trace)) { trace_func = 0; @@ -2440,4 +2443,7 @@ set_trace_func(obj, trace) if (!rb_obj_is_proc(trace)) { rb_raise(rb_eTypeError, "trace_func needs to be Proc"); + } + if (proc_get_safe_level(trace) > 0) { + rb_raise(rb_eSecurityError, "unsafe block"); } return trace_func = trace;
-- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦