fix(ruby): Fix crash when calculating Message hash values on 64-bit Windows (#8565)

* fix(ruby): Fix crash when calculating Message hash values on 64-bit Windows

* Better mapping for values outside the fixnum range

* Simpler downcasting of hash values

* Fix precedence

* Fix bundle on Ruby 2.4
This commit is contained in:
Daniel Azuma 2021-05-06 09:45:11 -07:00 committed by GitHub
parent c8389f8ed5
commit 7e3bbeda92
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 6 additions and 1 deletions

View File

@ -1,3 +1,5 @@
source 'https://rubygems.org'
gemspec
gem "irb", "~> 1.1", "< 1.2.0" if RUBY_VERSION < "2.5"

View File

@ -734,7 +734,10 @@ uint64_t Message_Hash(const upb_msg* msg, const upb_msgdef* m, uint64_t seed) {
*/
static VALUE Message_hash(VALUE _self) {
Message* self = ruby_to_Message(_self);
return INT2FIX(Message_Hash(self->msg, self->msgdef, 0));
uint64_t hash_value = Message_Hash(self->msg, self->msgdef, 0);
// RUBY_FIXNUM_MAX should be one less than a power of 2.
assert((RUBY_FIXNUM_MAX & (RUBY_FIXNUM_MAX + 1)) == 0);
return INT2FIX(hash_value & RUBY_FIXNUM_MAX);
}
/*