[#37248] [Feature:1.9] Enumerator#inspect — "Yusuke ENDOH" <mame@...>

遠藤です。

12 messages 2008/12/02

[#37337] [Feature #841] Object#self — "rubikitch ." <redmine@...>

Feature #841: Object#self

13 messages 2008/12/09

[#37513] Current status of 1.9.1 RC1's issues — "Yugui (Yuki Sonoda)" <yugui@...>

Hi, folks

14 messages 2008/12/20
[#37516] Re: Current status of 1.9.1 RC1's issues — Masatoshi SEKI <m_seki@...> 2008/12/20

咳といいます。

[#37576] [BUG:trunk] encoding for stdio's — "Yugui (Yuki Sonoda)" <yugui@...>

Yuguiです。

11 messages 2008/12/24

[ruby-dev:37583] Re: [Bug #884] Insecure operation: -r

From: SASADA Koichi <ko1@...>
Date: 2008-12-24 14:55:43 UTC
List: ruby-dev #37583
 ささだです.

Yukihiro Matsumoto wrote::
> |以下のようにするとエラーメッセージの中に謎の-rが出てきます。
> |
> |% ruby-trunk -ve '$SAFE=4;open("")'
> |ruby 1.9.1 (2008-12-14 revision 20736) [i686-linux]
> |-e:1:in `open': Insecure operation: -r (SecurityError)
> |        from -e:1:in `<main>'
> |%
> 
> メソッド(open)の中でrb_check_safe_obj()が呼ばれてエラーになっ
> た時、そのメソッドがトップレベルで呼ばれた場合、
> rb_frame_callee()がNULLであるため、-rで発生したエラーと勘違
> いするせいのようです。
> 
> rb_check_safe_obj()では、トップレベルで呼ばれたメソッドと、
> 実行環境が発生する前(-r)を区別する必要がありそうです。どうやっ
> て区別できるのかちょっと調べてみますね。

 そもそも,rb_frame_callee() が caller を見るのが良くないですね.
rb_f_method_name() の名前に引っ張られて,本来 rb_frame_caller() といった
名前にするところを rb_frame_callee() という名前にしているのが良くない.

 というわけで,こんなパッチを書いてみましたがどうでしょうか.

Index: eval.c
===================================================================
--- eval.c	(リビジョン 20968)
+++ eval.c	(作業コピー)
@@ -750,6 +750,12 @@ rb_frame_this_func(void)
 ID
 rb_frame_callee(void)
 {
+    return frame_func_id(GET_THREAD()->cfp);
+}
+
+static ID
+rb_frame_caller(void)
+{
     rb_thread_t *th = GET_THREAD();
     rb_control_frame_t *prev_cfp = RUBY_VM_PREVIOUS_CONTROL_FRAME(th->cfp);
     /* check if prev_cfp can be accessible */
@@ -1105,7 +1111,7 @@ rb_f_local_variables(void)
 static VALUE
 rb_f_method_name(void)
 {
-    ID fname = rb_frame_callee();
+    ID fname = rb_frame_caller(); /* need *caller* ID */

     if (fname) {
 	return ID2SYM(fname);


-- 
// SASADA Koichi at atdot dot net

In This Thread