Fix oneof submessage initialization bug.
authorPetteri Aimonen <jpa@git.mail.kapsi.fi>
Sat, 7 Mar 2015 08:25:09 +0000 (10:25 +0200)
committerPetteri Aimonen <jpa@git.mail.kapsi.fi>
Sat, 7 Mar 2015 08:25:09 +0000 (10:25 +0200)
Update issue 149
Status: FixedInGit

pb_decode.c
tests/oneof/decode_oneof.c

index 9d25dc6..4d8c7cb 100644 (file)
@@ -396,6 +396,10 @@ static bool checkreturn decode_static_field(pb_istream_t *stream, pb_wire_type_t
 
         case PB_HTYPE_ONEOF:
             *(pb_size_t*)iter->pSize = iter->pos->tag;
+            if (PB_LTYPE(type) == PB_LTYPE_SUBMESSAGE)
+            {
+                pb_message_set_to_defaults((const pb_field_t*)iter->pos->ptr, iter->pData);
+            }
             return func(stream, iter->pos, iter->pData);
 
         default:
index 83b4702..37075cd 100644 (file)
@@ -2,6 +2,7 @@
 
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <pb_decode.h>
 #include "oneof.pb.h"
 #include "test_helpers.h"
 /* Test the 'OneOfMessage' */
 int test_oneof_1(pb_istream_t *stream, int option)
 {
-    OneOfMessage msg = OneOfMessage_init_zero;
+    OneOfMessage msg;
     int status = 0;
 
+    /* To better catch initialization errors */
+    memset(&msg, 0xAA, sizeof(msg));
+
     if (!pb_decode(stream, OneOfMessage_fields, &msg))
     {
         printf("Decoding failed: %s\n", PB_GET_ERROR(stream));
@@ -124,4 +128,4 @@ int main(int argc, char **argv)
     }
 
     return 0;
-}
\ No newline at end of file
+}