aboutsummaryrefslogtreecommitdiff
path: root/ruby/ext/google/protobuf_c/encode_decode.c
diff options
context:
space:
mode:
authorPaul Yang <TeBoring@users.noreply.github.com>2018-07-12 11:04:29 -0700
committerGitHub <noreply@github.com>2018-07-12 11:04:29 -0700
commit40f9ef2f5602e8fbcdc04dc1b32003538b00ef4e (patch)
tree7e24ec31b77dd860e0bafe5fa9fe3085fb80b329 /ruby/ext/google/protobuf_c/encode_decode.c
parent0a59054c30e4f0ba10f10acfc1d7f3814c63e1a7 (diff)
downloadprotobuf-40f9ef2f5602e8fbcdc04dc1b32003538b00ef4e.tar.gz
protobuf-40f9ef2f5602e8fbcdc04dc1b32003538b00ef4e.tar.bz2
protobuf-40f9ef2f5602e8fbcdc04dc1b32003538b00ef4e.zip
Check the message to be encoded is the wrong type. (#4885)
Diffstat (limited to 'ruby/ext/google/protobuf_c/encode_decode.c')
-rw-r--r--ruby/ext/google/protobuf_c/encode_decode.c7
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 8c6ded64..c7a7aa1a 100644
--- a/ruby/ext/google/protobuf_c/encode_decode.c
+++ b/ruby/ext/google/protobuf_c/encode_decode.c
@@ -1108,6 +1108,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(cTypeError,
+ "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)) {