[#37959] [Bug:trunk] I can modify literals — Yusuke ENDOH <mame@...>

遠藤です。

13 messages 2009/02/10

[#38005] Is URI.decode() broken? — MOROHASHI Kyosuke <moronatural@...>

もろはしです。いつもお世話になっております。

39 messages 2009/02/14
[#38006] Re: Is URI.decode() broken? — Nobuyoshi Nakada <nobu@...> 2009/02/14

なかだです。

[#38009] Re: Is URI.decode() broken? — "NARUSE, Yui" <naruse@...> 2009/02/14

成瀬です、

[#38016] Re: Is URI.decode() broken? — Fujioka <fuj@...> 2009/02/15

xibbarこと藤岡です。

[#38017] Re: Is URI.decode() broken? — "NARUSE, Yui" <naruse@...> 2009/02/15

成瀬です。

[#38040] Re: Is URI.decode() broken? — akira yamada / やまだあきら <akira@...> 2009/02/17

NARUSE, Yui さんは書きました:

[#38124] Re: Is URI.decode() broken? — "NARUSE, Yui" <naruse@...> 2009/03/03

成瀬です。

[#39214] Re: Is URI.decode() broken? — akira yamada / やまだあきら <akira@...> 2009/09/02

(2009年03月03日 22:45), NARUSE, Yui さんは書きました:

[#39218] Re: Is URI.decode() broken? — "NARUSE, Yui" <naruse@...> 2009/09/02

成瀬です。

[#39236] Re: Is URI.decode() broken? — Tanaka Akira <akr@...> 2009/09/05

In article <4A9E44DD.6050706@airemix.jp>,

[#39242] Re: Is URI.decode() broken? — KOSAKI Motohiro <kosaki.motohiro@...> 2009/09/07

小崎@思いつきを適当に書いてみるテスト

[#39246] Re: Is URI.decode() broken? — Tanaka Akira <akr@...> 2009/09/07

In article <20090907091830.2C7A.A69D9226@jp.fujitsu.com>,

[#38096] 多重代入やメソッド引数の展開でto_aが呼ばれます — nagachika <nagachika00@...>

nagachika と申します。

10 messages 2009/02/26

[#38098] ブロック引数と括弧・引数なしsuper — Shugo Maeda <shugo@...>

前田です。

12 messages 2009/02/27

[ruby-dev:37962] Re: [Bug:trunk] I can modify literals

From: SASADA Koichi <ko1@...>
Date: 2009-02-10 19:20:12 UTC
List: ruby-dev #37962
 ささだです.

Yusuke ENDOH wrote::
> ObjectSpace を使うと種々のリテラルを書き換えることができてしまうようですが、
> 仕様でしょうか。

 他にも,Regexp などの Immutable と言われてるオブジェクトに勝手に特異メ
ソッドなりを追加できちゃう,とかもあります.Regexp なんかは,リテラルで
毎回同じオブジェクトを返すので,仕様的にはどう解決したものだか(これはそ
のままとするのが仕様かもしれない).影響としてぱっと思いつくのは,恐くな
いんですが Marshal をさせないようにするような嫌がらせです.

def xyzzy
  p Marshal.dump(/xyzzy/)
end

ObjectSpace.each_object(Regexp){|e|
  if /xyzzy/ =~ e.to_s
    unless e.frozen?
      begin
        def e.foo
        end
      rescue TypeError
        p e
      end
      e.instance_eval{
        @a = 1
      }
    end
  end
}

xyzzy #=> singleton can't be dumped (TypeError)


 なお,いただいたパッチについては,以下のようなほうが確実かなぁ,なんて
思いました.


Index: compile.c
===================================================================
--- compile.c	(リビジョン 22118)
+++ compile.c	(作業コピー)
@@ -398,6 +398,13 @@
 iseq_add_mark_object(rb_iseq_t *iseq, VALUE v)
 {
     if (!SPECIAL_CONST_P(v)) {
+	switch (BUILTIN_TYPE(v)) {
+	  case T_STRING:
+	  case T_ARRAY:
+	    dp(v);
+	    rb_obj_freeze(v);
+	}
+
 	rb_ary_push(iseq->mark_ary, v);
     }
     return COMPILE_OK;

-- 
// SASADA Koichi at atdot dot net

In This Thread