On 21 Jul 2010, at 17:06, Dreamcat Four wrote:

> Bug #3596: Can Marshal nested Hash from 1.9.2 --> 1.8.7
> http://redmine.ruby-lang.org/issues/show/3596
>=20
> Author: Dreamcat Four
> Status: Open, Priority: Normal
> ruby -v: ruby 1.9.2dev (2010-07-11 revision 28618) [i386-darwin10.4.0]
>=20
> Hi,
> The loaded Hash object has empty values where the inner hashes should =
be:
>=20
> expected:
> {"HashKeyA"=3D>{"StringA"=3D>"a"}, "HashKeyB"=3D>{"StringA"=3D>"a"}, =
"HashKeyC"=3D>{"StringA"=3D>"a"}, "HashKeyD"=3D>{"StringA"=3D>"a"}, =
"HashKeyE"=3D>{"StringA"=3D>"a"}, "HashKeyF"=3D>{"StringA"=3D>"a"}, =
"HashKeyG"=3D>{"StringA"=3D>"a"}, "HashKeyH"=3D>{"StringA"=3D>"a"}, =
"HashKeyI"=3D>{"StringA"=3D>"a"}, "HashKeyJ"=3D>{"StringA"=3D>"a"}, =
"HashKeyK"=3D>{"StringA"=3D>"a"}, "HashKeyL"=3D>{"StringA"=3D>"a"}, =
"HashKeyM"=3D>{"StringA"=3D>"a"}, "HashKeyN"=3D>{"StringA"=3D>"a"}, =
"HashKeyO"=3D>{"StringA"=3D>"a"}, "HashKeyP"=3D>{"StringA"=3D>"a"}, =
"HashKeyQ"=3D>{"StringA"=3D>"a"}, "HashKeyR"=3D>{"StringA"=3D>"a"}, =
"HashKeyS"=3D>{"StringA"=3D>"a"}, "HashKeyT"=3D>{"StringA"=3D>"a"}, =
"HashKeyU"=3D>{"StringA"=3D>"a"}, "HashKeyV"=3D>{"StringA"=3D>"a"}, =
"HashKeyW"=3D>{"StringA"=3D>"a"}, "HashKeyX"=3D>{"StringA"=3D>"a"}, =
"HashKeyY"=3D>{"StringA"=3D>"a"}, "HashKeyZ"=3D>{"StringA"=3D>"a"}}
>=20
> got:
> {"HashKeyA"=3D>{}, "HashKeyB"=3D>{}, "HashKeyC"=3D>{}, "HashKeyD"=3D>{},=
 "HashKeyE"=3D>{}, "HashKeyF"=3D>{}, "HashKeyG"=3D>{}, "HashKeyH"=3D>{}, =
"HashKeyI"=3D>{}, "HashKeyJ"=3D>{}, "HashKeyK"=3D>{}, "HashKeyL"=3D>{}, =
"HashKeyM"=3D>{}, "HashKeyN"=3D>{}, "HashKeyO"=3D>{}, "HashKeyP"=3D>{}, =
"HashKeyQ"=3D>{}, "HashKeyR"=3D>{}, "HashKeyS"=3D>{}, "HashKeyT"=3D>{}, =
"HashKeyU"=3D>{}, "HashKeyV"=3D>{}, "HashKeyW"=3D>{}, "HashKeyX"=3D>{}, =
"HashKeyY"=3D>{}, "HashKeyZ"=3D>{}}
>=20
> The 1.8.7 can reads the keys... but only for the 1st level of the =
hash. Heh, it *almost* works, just not quite fully there (but nearly!).
>=20
> I am guessing this aught to be regarded as a bug because the Marshal =
Version is 4,8 for both Ruby versions:
>=20
> 1.9.2
> $ cat /opt/rvm/src/ruby-1.9.2-rc2/marshal.c | grep '#define MARSHAL_M'
> #define MARSHAL_MAJOR   4
> #define MARSHAL_MINOR   8
>=20
> 1.8.7
> $ cat /opt/rvm/src/ruby-1.8.7-p174/marshal.c | grep '#define =
MARSHAL_M'
> #define MARSHAL_MAJOR   4
> #define MARSHAL_MINOR   8

Yup, certainly bouncing that and updating rubyspec would seem like a =
good idea. What changed in the format, can you dump on both interpreters =
and compare?=