aboutsummaryrefslogtreecommitdiffhomepage
path: root/ruby/ext/google/protobuf_c/message.c
diff options
context:
space:
mode:
authorGravatar Paul Yang <TeBoring@users.noreply.github.com>2017-10-26 14:41:43 -0700
committerGravatar GitHub <noreply@github.com>2017-10-26 14:41:43 -0700
commit23adfeb00327fbdccacc99806acb1a9a073bd8e0 (patch)
treef56e93003569b065b7c2fd191e97763e9c1738ab /ruby/ext/google/protobuf_c/message.c
parenta08b03d4c00a5793b88b494f672513f6ad46a681 (diff)
Reserve unknown in Ruby (#3763)
* Reserve unknown in ruby * Revert ruby tests. Wait for cpp impl for conformance test * Add conformance test for preserving unknown * Add unknown field conformance test to csharp failure list. * Fix comments * Fix comment * Fix comments * Fix typo * Use stringsink_string directly * Mark hd unused * Remove unused encodeunknown_handlerfunc
Diffstat (limited to 'ruby/ext/google/protobuf_c/message.c')
-rw-r--r--ruby/ext/google/protobuf_c/message.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/ruby/ext/google/protobuf_c/message.c b/ruby/ext/google/protobuf_c/message.c
index 42910bfe..bc73d48c 100644
--- a/ruby/ext/google/protobuf_c/message.c
+++ b/ruby/ext/google/protobuf_c/message.c
@@ -44,6 +44,11 @@ void Message_mark(void* _self) {
}
void Message_free(void* self) {
+ stringsink* unknown = ((MessageHeader *)self)->unknown_fields;
+ if (unknown != NULL) {
+ stringsink_uninit(unknown);
+ free(unknown);
+ }
xfree(self);
}
@@ -67,6 +72,8 @@ VALUE Message_alloc(VALUE klass) {
msg->descriptor = desc;
rb_ivar_set(ret, descriptor_instancevar_interned, descriptor);
+ msg->unknown_fields = NULL;
+
layout_init(desc->layout, Message_data(msg));
return ret;