From: Kazuhiko Shiozaki Date: 2010-01-08T04:19:27+09:00 Subject: [ruby-dev:39985] [Bug #1864] Ruby-1.8.7 $SAFE=4のarray/hashのrecursive比較でSecurityError チケット #1864 が更新されました。 (by Kazuhiko Shiozaki) 参考までに、ruby_1_8ブランチ向けのパッチです。 なお、 r25358 でruby_1_8にバックポートされたテストは、この修正なしでも通ってしまうのですが、元々報告したtDiaryでのエラーは現在も確実に再現します(ruby-1.8.6p383, ruby-1.8.7p248, ruby-1.8.8dev rev26226 のいずれも)。 Index: ruby_1_8/eval.c =================================================================== --- ruby_1_8/eval.c (revision 26248) +++ ruby_1_8/eval.c (working copy) @@ -13853,6 +13853,7 @@ sym = ID2SYM(rb_frame_last_func()); if (NIL_P(hash) || TYPE(hash) != T_HASH) { hash = rb_hash_new(); + OBJ_TAINT(hash); rb_thread_local_aset(rb_thread_current(), recursive_key, hash); list = Qnil; } @@ -13861,6 +13862,7 @@ } if (NIL_P(list) || TYPE(list) != T_HASH) { list = rb_hash_new(); + OBJ_TAINT(list); rb_hash_aset(hash, sym, list); } rb_hash_aset(list, obj, Qtrue); ---------------------------------------- http://redmine.ruby-lang.org/issues/show/1864 ---------------------------------------- http://redmine.ruby-lang.org