Code Review: HashFixes

tfpt review “/shelveset:HashFixes;REDMOND\tomat”

Fixes implementation of hash methods in REXML and RubyGems. The
current implementation is incorrect since it sums hash codes of
subcomponents potentially overflowing to Bignum. This issue is mainly
exposed when calculating hash of an array. Array#hash calculates its
hash code by calling hash on each item and converting the result of the
hash method into Fixnum. So if the result if the hash method is a Bignum
an error is reported:

class C
def hash
100000000000000000000
end
end

[C.new].hash # => in hash': bignum too big to convert intolong’
(RangeError)

Tomas

How are we going to make sure this gets back into REXML and RubyGems? We
shouldn’t ship significantly different versions of the Ruby stdlib, as
people will expect to switch to any version of the stdlib without
issues.

My first thought is to have someone in the community step up to propose
these changes to RubyGems and REXML for us, and get them checked in.
Anyone interested?

~js

No takers? I’ve documented this at
http://ironruby.net/Documentation/Ruby_Standard_Library/Modifications so
if anyone wants to bite the info is there.

~js