diff options
author | Paul Yang <TeBoring@users.noreply.github.com> | 2018-07-23 11:05:28 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-07-23 11:05:28 -0700 |
commit | e508fc0c661fefe5228a9cab77d0c07ef220f34a (patch) | |
tree | 560794070be87d9b2bc55464c9cb32c4622fb00c /ruby/ext/google | |
parent | fc90fd6df1db9c89e08eaf93a9a525928c459cdf (diff) | |
download | protobuf-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
Diffstat (limited to 'ruby/ext/google')
-rw-r--r-- | ruby/ext/google/protobuf_c/encode_decode.c | 7 |
1 files changed, 7 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)) { |