[#23717] error at TestDRbMServer (test/drb) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>

山本です。どうしても原因がわからないので、報告だけ・・・

18 messages 2004/06/19
[#23718] Re: error at TestDRbMServer (test/drb) — nobu.nakada@... 2004/06/19

なかだです。

[#23719] Re: error at TestDRbMServer (test/drb) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/06/19

山本です。

[#23720] Re: error at TestDRbMServer (test/drb) — nobu.nakada@... 2004/06/19

なかだです。

[#23724] Re: error at TestDRbMServer (test/drb) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/06/19

山本です。

[#23762] Ruby 1.8.2 to be released. — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

40 messages 2004/06/23

[#23784] URI() — Tanaka Akira <akr@...17n.org>

前から思っていたのですが、URI.parse("http://...") を URI("http://...")

19 messages 2004/06/25

[ruby-dev:23721] Re: define_method and $SAFE

From: nobu.nakada@...
Date: 2004-06-19 04:03:05 UTC
List: ruby-dev #23721
なかだです。

At Fri, 18 Jun 2004 08:01:24 +0900,
Yukihiro Matsumoto wrote in [ruby-dev:23716]:
> |外部の$SAFEを変更できなくなっていました。で、そのテストを作って
> |いて気づいたんですが、メソッドを直接呼び出したときとMethod#call
> |を使ったときでの振舞の違い、Methodオブジェクト内部での$SAFEの変
> |更は外部に影響しないというのは仕様でしょうか。
> 
> いや、仕様じゃないです。気がついてませんでした。

こんなとこでしょうか。ところでこれは1.8にも入れますか。


* eval.c (method_call): allow changing $SAFE.  [ruby-dev:23713]


Index: eval.c
===================================================================
RCS file: /var/cvs/src/ruby/eval.c,v
retrieving revision 1.670
diff -U2 -p -d -r1.670 eval.c
--- eval.c	18 Jun 2004 14:52:06 -0000	1.670
+++ eval.c	19 Jun 2004 03:49:13 -0000
@@ -8725,5 +8725,5 @@ method_call(argc, argv, method)
     struct METHOD *data;
     int state;
-    volatile int safe = ruby_safe_level;
+    volatile int safe = -1;
 
     Data_Get_Struct(method, struct METHOD, data);
@@ -8733,6 +8733,7 @@ method_call(argc, argv, method)
     PUSH_ITER(rb_block_given_p()?ITER_PRE:ITER_NOT);
     PUSH_TAG(PROT_NONE);
-    if (OBJ_TAINTED(method) && ruby_safe_level < 4) {
-	ruby_safe_level = 4;
+    if (OBJ_TAINTED(method)) {
+	safe = ruby_safe_level;
+	if (ruby_safe_level < 4) ruby_safe_level = 4;
     }
     if ((state = EXEC_TAG()) == 0) {
@@ -8741,5 +8742,5 @@ method_call(argc, argv, method)
     POP_TAG();
     POP_ITER();
-    ruby_safe_level = safe;
+    if (safe >= 0) ruby_safe_level = safe;
     if (state) JUMP_TAG(state);
     return result;


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

In This Thread