From e508fc0c661fefe5228a9cab77d0c07ef220f34a Mon Sep 17 00:00:00 2001 From: Paul Yang Date: Mon, 23 Jul 2018 11:05:28 -0700 Subject: Check the message to be encoded is the wrong type. (#4885) (#4949) * Check the message to be encoded is the wrong type. (#4885) * Change TypeError to ArgumentError --- ruby/ext/google/protobuf_c/encode_decode.c | 7 +++++++ ruby/tests/encode_decode_test.rb | 10 ++++++++++ 2 files changed, 17 insertions(+) diff --git a/ruby/ext/google/protobuf_c/encode_decode.c b/ruby/ext/google/protobuf_c/encode_decode.c index 12080d03..9fa4bfd9 100644 --- a/ruby/ext/google/protobuf_c/encode_decode.c +++ b/ruby/ext/google/protobuf_c/encode_decode.c @@ -1106,6 +1106,13 @@ static void putmsg(VALUE msg_rb, const Descriptor* desc, TypedData_Get_Struct(msg_rb, MessageHeader, &Message_type, msg); + if (desc != msg->descriptor) { + rb_raise(rb_eArgError, + "The type of given msg is '%s', expect '%s'.", + upb_msgdef_fullname(msg->descriptor->msgdef), + upb_msgdef_fullname(desc->msgdef)); + } + for (upb_msg_field_begin(&i, desc->msgdef); !upb_msg_field_done(&i); upb_msg_field_next(&i)) { diff --git a/ruby/tests/encode_decode_test.rb b/ruby/tests/encode_decode_test.rb index 2bd9b98b..f8b991cd 100644 --- a/ruby/tests/encode_decode_test.rb +++ b/ruby/tests/encode_decode_test.rb @@ -84,4 +84,14 @@ class EncodeDecodeTest < Test::Unit::TestCase assert_match 'optional_int32', json end + + def test_encode_wrong_msg + e = assert_raise ::ArgumentError do + m = A::B::C::TestMessage.new( + :optional_int32 => 1, + ) + Google::Protobuf::Any.encode(m) + end + end + end -- cgit v1.2.3