Skip to content

Commit f3f8707

Browse files
authored
Merge pull request #8434 from haberman/ruby-message-eq
Fixed message equality in cases where the message type is different.
2 parents a38319b + 38e1b59 commit f3f8707

File tree

2 files changed

+5
-7
lines changed

2 files changed

+5
-7
lines changed

ruby/ext/google/protobuf_c/message.c

+3-6
Original file line numberDiff line numberDiff line change
@@ -697,16 +697,13 @@ bool Message_Equal(const upb_msg *m1, const upb_msg *m2, const upb_msgdef *m) {
697697
* field is of a primitive type).
698698
*/
699699
static VALUE Message_eq(VALUE _self, VALUE _other) {
700-
if (TYPE(_self) != TYPE(_other)) {
701-
return Qfalse;
702-
}
700+
if (CLASS_OF(_self) != CLASS_OF(_other)) return Qfalse;
703701

704702
Message* self = ruby_to_Message(_self);
705703
Message* other = ruby_to_Message(_other);
704+
assert(self->msgdef == other->msgdef);
706705

707-
return Message_Equal(self->msg, other->msg, self->msgdef)
708-
? Qtrue
709-
: Qfalse;
706+
return Message_Equal(self->msg, other->msg, self->msgdef) ? Qtrue : Qfalse;
710707
}
711708

712709
uint64_t Message_Hash(const upb_msg* msg, const upb_msgdef* m, uint64_t seed) {

ruby/tests/common_tests.rb

+2-1
Original file line numberDiff line numberDiff line change
@@ -699,12 +699,13 @@ def test_deep_copy
699699
assert m.repeated_msg[0].object_id != m2.repeated_msg[0].object_id
700700
end
701701

702-
def test_eq
702+
def test_message_eq
703703
m = proto_module::TestMessage.new(:optional_int32 => 42,
704704
:repeated_int32 => [1, 2, 3])
705705
m2 = proto_module::TestMessage.new(:optional_int32 => 43,
706706
:repeated_int32 => [1, 2, 3])
707707
assert m != m2
708+
assert_not_equal proto_module::TestMessage.new, proto_module::TestMessage2.new
708709
end
709710

710711
def test_enum_lookup

0 commit comments

Comments
 (0)