diff options
Diffstat (limited to 'pb_decode.c')
-rw-r--r-- | pb_decode.c | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/pb_decode.c b/pb_decode.c index 0e55cbfb..6c6b1d9e 100644 --- a/pb_decode.c +++ b/pb_decode.c @@ -337,17 +337,14 @@ bool checkreturn pb_decode(pb_istream_t *stream, const pb_field_t fields[], void pb_field_iterator_t iter; int i; - if (fields[0].tag == 0) - { - /* No fields -> nothing to do */ - return pb_read(stream, NULL, stream->bytes_left); - } - pb_field_init(&iter, fields, dest_struct); /* Initialize size/has fields and apply default values */ do { + if (iter.current->tag == 0) + continue; + if (PB_HTYPE(iter.current->type) == PB_HTYPE_OPTIONAL) { *(bool*)iter.pSize = false; |