X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=pb_decode.c;h=d47411300d765861d2cfbb3a604a6afd402644bd;hb=5b536d40a11edb3161f2f19609c2b51899c354b0;hp=edcbb18283877a80fc55ea770276a640161845b3;hpb=c3729599b0542770eff6259836c840e7a8bb3aab;p=apps%2Fagl-service-can-low-level.git diff --git a/pb_decode.c b/pb_decode.c index edcbb182..d4741130 100644 --- a/pb_decode.c +++ b/pb_decode.c @@ -361,7 +361,7 @@ static bool checkreturn decode_field(pb_istream_t *stream, pb_wire_type_t wire_t && PB_LTYPE(iter->current->type) <= PB_LTYPE_LAST_PACKABLE) { /* Packed array */ - bool status; + bool status = true; size_t *size = (size_t*)iter->pSize; pb_istream_t substream; if (!pb_make_string_substream(stream, &substream)) @@ -371,11 +371,17 @@ static bool checkreturn decode_field(pb_istream_t *stream, pb_wire_type_t wire_t { void *pItem = (uint8_t*)iter->pData + iter->current->data_size * (*size); if (!func(&substream, iter->current, pItem)) - return false; + { + status = false; + break; + } (*size)++; } - status = (substream.bytes_left == 0); pb_close_string_substream(stream, &substream); + + if (substream.bytes_left != 0) + PB_RETURN_ERROR(stream, "array overflow"); + return status; } else @@ -529,7 +535,7 @@ bool checkreturn pb_decode_noinit(pb_istream_t *stream, const pb_field_t fields[ * are already close to end after decoding. */ unsigned req_field_count; - uint8_t last_type; + pb_type_t last_type; unsigned i; do { req_field_count = iter.required_field_index;