diff --git a/ruby/ext/google/protobuf_c/message.c b/ruby/ext/google/protobuf_c/message.c index b01741b61ce..1eb0cb76dc8 100644 --- a/ruby/ext/google/protobuf_c/message.c +++ b/ruby/ext/google/protobuf_c/message.c @@ -697,16 +697,13 @@ bool Message_Equal(const upb_msg *m1, const upb_msg *m2, const upb_msgdef *m) { * field is of a primitive type). */ static VALUE Message_eq(VALUE _self, VALUE _other) { - if (TYPE(_self) != TYPE(_other)) { - return Qfalse; - } + if (CLASS_OF(_self) != CLASS_OF(_other)) return Qfalse; Message* self = ruby_to_Message(_self); Message* other = ruby_to_Message(_other); + assert(self->msgdef == other->msgdef); - return Message_Equal(self->msg, other->msg, self->msgdef) - ? Qtrue - : Qfalse; + return Message_Equal(self->msg, other->msg, self->msgdef) ? Qtrue : Qfalse; } uint64_t Message_Hash(const upb_msg* msg, const upb_msgdef* m, uint64_t seed) { diff --git a/ruby/tests/common_tests.rb b/ruby/tests/common_tests.rb index 1957422fa93..3549ca7414d 100644 --- a/ruby/tests/common_tests.rb +++ b/ruby/tests/common_tests.rb @@ -687,12 +687,13 @@ def test_deep_copy assert m.repeated_msg[0].object_id != m2.repeated_msg[0].object_id end - def test_eq + def test_message_eq m = proto_module::TestMessage.new(:optional_int32 => 42, :repeated_int32 => [1, 2, 3]) m2 = proto_module::TestMessage.new(:optional_int32 => 43, :repeated_int32 => [1, 2, 3]) assert m != m2 + assert_not_equal proto_module::TestMessage.new, proto_module::TestMessage2.new end def test_enum_lookup