From: Kent Ryhorchuk Date: Tue, 16 Jul 2013 01:04:47 +0000 (-0700) Subject: Check for empty message type before incrementing required_field_index. X-Git-Tag: 3.99.1~14^2~366 X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=commitdiff_plain;h=3c10e6fa71cbee85c540c0702a5a95333cd3be32;p=apps%2Flow-level-can-service.git Check for empty message type before incrementing required_field_index. If you have a message that defined as empty, but attempt to decode a message that has one or more unknown fields then pb_decode fails. The method used to count the number of required fields counts 1 required field because the default type of PB_LAST_FIELD is PB_HTYPE_REQUIRED. --- diff --git a/pb_decode.c b/pb_decode.c index c533698..a079556 100644 --- a/pb_decode.c +++ b/pb_decode.c @@ -308,12 +308,12 @@ static bool pb_field_next(pb_field_iterator_t *iter) prev_size *= iter->pos->array_size; } - if (PB_HTYPE(iter->pos->type) == PB_HTYPE_REQUIRED) - iter->required_field_index++; - if (iter->pos->tag == 0) return false; /* Only happens with empty message types */ + if (PB_HTYPE(iter->pos->type) == PB_HTYPE_REQUIRED) + iter->required_field_index++; + iter->pos++; iter->field_index++; if (iter->pos->tag == 0)