mirror of
https://github.com/webmproject/libwebp.git
synced 2025-06-27 14:44:35 +02:00
VP8BitReaderSetBuffer: move NULL check to call site
This is a refinement of 654bfb04 Avoid nullptr arithmetic in VP8BitReaderSetBuffer and removes an unneeded/redundant check in 2 of the 3 calls to this function: * VP8InitBitReader: `start` is guaranteed to be non-NULL * CopyParts0Data: `start` is allocated and checked In `DoRemap()` `last_start` will be NULL before the partitions are parsed. This is the only call that was missing a check. The offsetting of a NULL pointer in `VP8BitReaderSetBuffer` was harmless in this case as the bitreader will not be used meaningfully until there is enough data to begin decoding partition 0. In that case the bitreader will be initialized by `ParsePartitions()` and updated by `DoRemap()` when more data is available. Bug: 393104377 Change-Id: Ib44bc35e00e5129c592d742a2469420cd3d0e858
This commit is contained in:
parent
8852f89ab5
commit
bbf3cbb1be
@ -141,9 +141,15 @@ static void DoRemap(WebPIDecoder* const idec, ptrdiff_t offset) {
|
|||||||
}
|
}
|
||||||
{
|
{
|
||||||
const uint8_t* const last_start = dec->parts[last_part].buf;
|
const uint8_t* const last_start = dec->parts[last_part].buf;
|
||||||
|
// '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,
|
VP8BitReaderSetBuffer(&dec->parts[last_part], last_start,
|
||||||
mem->buf + mem->end - last_start);
|
mem->buf + mem->end - last_start);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (NeedCompressedAlpha(idec)) {
|
if (NeedCompressedAlpha(idec)) {
|
||||||
ALPHDecoder* const alph_dec = dec->alph_dec;
|
ALPHDecoder* const alph_dec = dec->alph_dec;
|
||||||
dec->alpha_data += offset;
|
dec->alpha_data += offset;
|
||||||
|
@ -31,13 +31,12 @@
|
|||||||
void VP8BitReaderSetBuffer(VP8BitReader* const br,
|
void VP8BitReaderSetBuffer(VP8BitReader* const br,
|
||||||
const uint8_t* const start,
|
const uint8_t* const start,
|
||||||
size_t size) {
|
size_t size) {
|
||||||
if (start != NULL) {
|
assert(start != NULL);
|
||||||
br->buf = start;
|
br->buf = start;
|
||||||
br->buf_end = start + size;
|
br->buf_end = start + size;
|
||||||
br->buf_max =
|
br->buf_max =
|
||||||
(size >= sizeof(lbit_t)) ? start + size - sizeof(lbit_t) + 1 : start;
|
(size >= sizeof(lbit_t)) ? start + size - sizeof(lbit_t) + 1 : start;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void VP8InitBitReader(VP8BitReader* const br,
|
void VP8InitBitReader(VP8BitReader* const br,
|
||||||
const uint8_t* const start, size_t size) {
|
const uint8_t* const start, size_t size) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user