[#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:37964] Re: [Bug:trunk] I can modify literals

From: "U.Nakamura" <usa@...>
Date: 2009-02-11 07:11:06 UTC
List: ruby-dev #37964
こんにちは、なかむら(う)です。

In message "[ruby-dev:37959] [Bug:trunk] I can modify literals"
    on Feb.11,2009 02:16:05, <mame@tsg.ne.jp> wrote:
> バグだとして、リテラルを freeze するパッチを書きましたが、IRC では
> 
>   - freeze で解決するのが正しいやり方なのか
>   - freeze しても finalizer が付け替えできるのではないか
> 
> という感じの指摘がありました。どう直すのがよいでしょう。

元の問題も気になりますが、frozenなオブジェクトに対してfinalizer
を付け替えできてしまうことが気になります。
実際にはObjectSpaceの操作であることや、finalizerからは元のオ
ブジェクトそのものの操作ができるわけではないことなどが理由な
のではないかとは思いますが、付け替えの操作自体はオブジェクト
の内部フラグを変更しているので(あれ、取り除くとき変更してない
な)、禁止してもいいのではないかという気もします。

Index: gc.c
===================================================================
--- gc.c	(revision 22185)
+++ gc.c	(working copy)
@@ -2261,9 +2261,11 @@ static VALUE
 undefine_final(VALUE os, VALUE obj)
 {
     rb_objspace_t *objspace = &rb_objspace;
+    if (OBJ_FROZEN(obj)) rb_error_frozen("object");
     if (finalizer_table) {
 	st_delete(finalizer_table, (st_data_t*)&obj, 0);
     }
+    FL_UNSET(obj, FL_FINALIZE);
     return obj;
 }
 
@@ -2283,6 +2285,7 @@ define_final(int argc, VALUE *argv, VALU
     VALUE obj, block, table;
 
     rb_scan_args(argc, argv, "11", &obj, &block);
+    if (OBJ_FROZEN(obj)) rb_error_frozen("object");
     if (argc == 1) {
 	block = rb_block_proc();
     }

それでは。
-- 
U.Nakamura <usa@garbagecollect.jp>


In This Thread