aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Yang <TeBoring@users.noreply.github.com>2018-07-23 11:05:28 -0700
committerGitHub <noreply@github.com>2018-07-23 11:05:28 -0700
commite508fc0c661fefe5228a9cab77d0c07ef220f34a (patch)
tree560794070be87d9b2bc55464c9cb32c4622fb00c
parentfc90fd6df1db9c89e08eaf93a9a525928c459cdf (diff)
downloadprotobuf-e508fc0c661fefe5228a9cab77d0c07ef220f34a.tar.gz
protobuf-e508fc0c661fefe5228a9cab77d0c07ef220f34a.tar.bz2
protobuf-e508fc0c661fefe5228a9cab77d0c07ef220f34a.zip
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
-rw-r--r--ruby/ext/google/protobuf_c/encode_decode.c7
-rw-r--r--ruby/tests/encode_decode_test.rb10
2 files changed, 17 insertions, 0 deletions
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