From: Tomoyuki Chikanaga Date: 2010-06-22T19:49:59+09:00 Subject: [ruby-dev:41672] [Bug #3463] 1.9.2-preview3 で [BUG] gc_sweep(): unknown data type 0x0 チケット #3463 が更新されました。 (by Tomoyuki Chikanaga) ファイル marshal.patch 追加 すみません、先程添付したパッチは問題がありました。 struct dump_arg::str が指すスロットが一旦回収されて他のオブジェクトに割り当てられていた時に間違って taint してしまいそうです。 T_DATA 型のオブジェクトに登録する free 関数の中では構造体が VALUE 型で持っているRubyの参照は一切さわってはいけないですね。 struct dump_arg の str は w_nbytes で書き込む時に OBJ_TAINT/OBJ_UNTRUST すれば良いのではないかと考えパッチを書き直しました。 make test-all でエラーが増えないことと、一応以下のような簡単な確認をしました。 >> obj = Object.new => # >> Marshal.dump(obj).tainted? => false >> obj.taint => # >> Marshal.dump(obj).tainted? => true ---------------------------------------- http://redmine.ruby-lang.org/issues/show/3463 ---------------------------------------- http://redmine.ruby-lang.org