Fixed message equality in cases where the message type is different.
If the message types are different, equality comparison must return
false.
diff --git a/ruby/ext/google/protobuf_c/message.c b/ruby/ext/google/protobuf_c/message.c
index b01741b..e3e6f94 100644
--- a/ruby/ext/google/protobuf_c/message.c
+++ b/ruby/ext/google/protobuf_c/message.c
@@ -704,7 +704,8 @@
Message* self = ruby_to_Message(_self);
Message* other = ruby_to_Message(_other);
- return Message_Equal(self->msg, other->msg, self->msgdef)
+ return self->msgdef == other->msgdef &&
+ Message_Equal(self->msg, other->msg, self->msgdef)
? Qtrue
: Qfalse;
}
diff --git a/ruby/tests/common_tests.rb b/ruby/tests/common_tests.rb
index 1957422..3549ca7 100644
--- a/ruby/tests/common_tests.rb
+++ b/ruby/tests/common_tests.rb
@@ -687,12 +687,13 @@
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