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