diff --git a/src/dec/idec_dec.c b/src/dec/idec_dec.c index 7c0bb4d1..cf8a33a4 100644 --- a/src/dec/idec_dec.c +++ b/src/dec/idec_dec.c @@ -141,8 +141,14 @@ static void DoRemap(WebPIDecoder* const idec, ptrdiff_t offset) { } { const uint8_t* const last_start = dec->parts[last_part].buf; - VP8BitReaderSetBuffer(&dec->parts[last_part], last_start, - mem->buf + mem->end - last_start); + // 'last_start' will be NULL when 'idec->state' is < STATE_VP8_PARTS0 + // and through a portion of that state (when there isn't enough data to + // parse the partitions). The bitreader is only used meaningfully when + // there is enough data to begin parsing partition 0. + if (last_start != NULL) { + VP8BitReaderSetBuffer(&dec->parts[last_part], last_start, + mem->buf + mem->end - last_start); + } } if (NeedCompressedAlpha(idec)) { ALPHDecoder* const alph_dec = dec->alph_dec; diff --git a/src/utils/bit_reader_utils.c b/src/utils/bit_reader_utils.c index ec9a2341..5e3a8b37 100644 --- a/src/utils/bit_reader_utils.c +++ b/src/utils/bit_reader_utils.c @@ -31,12 +31,11 @@ void VP8BitReaderSetBuffer(VP8BitReader* const br, const uint8_t* const start, size_t size) { - if (start != NULL) { - br->buf = start; - br->buf_end = start + size; - br->buf_max = - (size >= sizeof(lbit_t)) ? start + size - sizeof(lbit_t) + 1 : start; - } + assert(start != NULL); + br->buf = start; + br->buf_end = start + size; + br->buf_max = + (size >= sizeof(lbit_t)) ? start + size - sizeof(lbit_t) + 1 : start; } void VP8InitBitReader(VP8BitReader* const br,