[ruby-dev:31870] marshal_dumpで不正なデータが書き出される

From: kumaryu <kumaryu@...>
Date: 2007-09-26 17:05:10 UTC
List: ruby-dev #31870
kumaryuと申します。

marshal_dumpでテンポラリなオブジェクトを返している時に
GCが発生すると間違ったオブジェクトへのリンクが書き出されます。

$ cat ~/test.rb

class A
  def initialize(val)
    @value = val
  end

  def marshal_dump
    GC.start
    [@value]
  end

  def marshal_load(data)
    p data
  end
end

Marshal.load(Marshal.dump(Array.new(10) {|i| A.new(i) }))

$ ./ruby -v
ruby 1.9.0 (2007-09-26 patchlevel 0) [i686-darwin8.10.1]
$ ./ruby ~/test.rb
[0]
[1]
[0]
[1]
[0]
[1]
[0]
[1]
[0]
[1]

正しくはこうなって欲しいです。
$ ./ruby ~/test.rb
[0]
[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]
[9]

以上です。

-----------------------------------
Ryuichi Sakamoto (kumaryu)
mail: kumaryu@kumaryu.net
website: http://www.kumaryu.net/
-----------------------------------

In This Thread

Prev Next