From: "mrkn (Kenta Murata)" <muraken@...>
Date: 2012-11-14T11:14:44+09:00
Subject: [ruby-core:49327] [ruby-trunk - Bug #7348] marshaling an object by a float does not work


Issue #7348 has been updated by mrkn (Kenta Murata).


irb(main):006:0> e = Object.new
irb(main):007:0> Marshal.load(Marshal.dump([[2.0e-100, e], [e]]))
=> [[2.0e-100, #<Object:0x007fa45a10bc28>], [#<Object:0x007fa45a10bc28>]]

Therefore it is related to flonum.
----------------------------------------
Bug #7348: marshaling an object by a float does not work
https://bugs.ruby-lang.org/issues/7348#change-32885

Author: tenderlovemaking (Aaron Patterson)
Status: Open
Priority: Normal
Assignee: 
Category: 
Target version: 
ruby -v: ruby 2.0.0dev (2012-11-14 trunk 37650) [x86_64-darwin12.2.1]


The below `calls` object doesn't round trip through marshal on edge ruby:

  def test_marshal_object_and_float
    e = Object.new
    calls = []
    calls << [2.0, e]
    calls << [e]
    assert_equal calls, Marshal.load(Marshal.dump(calls))
  end

When I run this test case, for some reason, the float takes the place of the object in the second array:

[36/82] TestMarshal#test_marshal_object_and_float = 0.00 s         
  1) Failure:
test_marshal_object_and_float(TestMarshal) [/Users/aaron/git/ruby/test/ruby/test_marshal.rb:40]:
<[[2.0, #<Object:0x007fa5c20b08a0>], [#<Object:0x007fa5c20b08a0>]]> expected but was
<[[2.0, #<Object:0x007fa5c20b05a8>], [2.0]]>.

I've attached a failing test case.


-- 
http://bugs.ruby-lang.org/