From: Kazuhiro NISHIYAMA Date: 2009-08-03T16:41:29+09:00 Subject: [ruby-dev:38993] [Bug #1864] Ruby-1.8.7 $SAFE=4のarray/hashのrecursive比較でSecurityError チケット #1864 が更新されました。 (by Kazuhiro NISHIYAMA) 1.9 の方でも同様でした。 trunk だと以下のように OBJ_UNTRUST をつければ良さそうです。 # 再現する短いテストコードがほしい...。 Index: thread.c =================================================================== --- thread.c (revision 24365) +++ thread.c (working copy) @@ -3362,6 +3362,7 @@ } if (NIL_P(list) || TYPE(list) != T_HASH) { list = rb_hash_new(); + OBJ_UNTRUST(list); rb_hash_aset(hash, sym, list); } if (!paired_obj) { @@ -3374,6 +3375,7 @@ if (TYPE(pair_list) != T_HASH){ VALUE other_paired_obj = pair_list; pair_list = rb_hash_new(); + OBJ_UNTRUST(pair_list); rb_hash_aset(pair_list, other_paired_obj, Qtrue); rb_hash_aset(list, obj, pair_list); } ---------------------------------------- http://redmine.ruby-lang.org/issues/show/1864 ---------------------------------------- http://redmine.ruby-lang.org