diff options
Diffstat (limited to 'thirdparty/libwebp/src/dec/idec_dec.c')
| -rw-r--r-- | thirdparty/libwebp/src/dec/idec_dec.c | 11 | 
1 files changed, 8 insertions, 3 deletions
diff --git a/thirdparty/libwebp/src/dec/idec_dec.c b/thirdparty/libwebp/src/dec/idec_dec.c index 9bc9166808..9035df5659 100644 --- a/thirdparty/libwebp/src/dec/idec_dec.c +++ b/thirdparty/libwebp/src/dec/idec_dec.c @@ -166,9 +166,11 @@ static int AppendToMemBuffer(WebPIDecoder* const idec,    VP8Decoder* const dec = (VP8Decoder*)idec->dec_;    MemBuffer* const mem = &idec->mem_;    const int need_compressed_alpha = NeedCompressedAlpha(idec); -  const uint8_t* const old_start = mem->buf_ + mem->start_; +  const uint8_t* const old_start = +      (mem->buf_ == NULL) ? NULL : mem->buf_ + mem->start_;    const uint8_t* const old_base =        need_compressed_alpha ? dec->alpha_data_ : old_start; +  assert(mem->buf_ != NULL || mem->start_ == 0);    assert(mem->mode_ == MEM_MODE_APPEND);    if (data_size > MAX_CHUNK_PAYLOAD) {      // security safeguard: trying to allocate more than what the format @@ -184,7 +186,7 @@ static int AppendToMemBuffer(WebPIDecoder* const idec,      uint8_t* const new_buf =          (uint8_t*)WebPSafeMalloc(extra_size, sizeof(*new_buf));      if (new_buf == NULL) return 0; -    memcpy(new_buf, old_base, current_size); +    if (old_base != NULL) memcpy(new_buf, old_base, current_size);      WebPSafeFree(mem->buf_);      mem->buf_ = new_buf;      mem->buf_size_ = (size_t)extra_size; @@ -192,6 +194,7 @@ static int AppendToMemBuffer(WebPIDecoder* const idec,      mem->end_ = current_size;    } +  assert(mem->buf_ != NULL);    memcpy(mem->buf_ + mem->end_, data, data_size);    mem->end_ += data_size;    assert(mem->end_ <= mem->buf_size_); @@ -204,7 +207,9 @@ static int RemapMemBuffer(WebPIDecoder* const idec,                            const uint8_t* const data, size_t data_size) {    MemBuffer* const mem = &idec->mem_;    const uint8_t* const old_buf = mem->buf_; -  const uint8_t* const old_start = old_buf + mem->start_; +  const uint8_t* const old_start = +      (old_buf == NULL) ? NULL : old_buf + mem->start_; +  assert(old_buf != NULL || mem->start_ == 0);    assert(mem->mode_ == MEM_MODE_MAP);    if (data_size < mem->buf_size_) return 0;  // can't remap to a shorter buffer!  |