mirror of
https://github.com/webmproject/libwebp.git
synced 2024-11-20 04:18:26 +01:00
Merge "fix out-of-bound read during alpha-plane decoding"
This commit is contained in:
commit
defc8e1b01
@ -12,8 +12,8 @@
|
|||||||
// Authors: Vikas Arora (vikaas.arora@gmail.com)
|
// Authors: Vikas Arora (vikaas.arora@gmail.com)
|
||||||
// Jyrki Alakuijala (jyrki@google.com)
|
// Jyrki Alakuijala (jyrki@google.com)
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#include "./alphai.h"
|
#include "./alphai.h"
|
||||||
#include "./vp8li.h"
|
#include "./vp8li.h"
|
||||||
#include "../dsp/lossless.h"
|
#include "../dsp/lossless.h"
|
||||||
@ -740,6 +740,7 @@ static int DecodeAlphaData(VP8LDecoder* const dec, uint8_t* const data,
|
|||||||
const int len_code_limit = NUM_LITERAL_CODES + NUM_LENGTH_CODES;
|
const int len_code_limit = NUM_LITERAL_CODES + NUM_LENGTH_CODES;
|
||||||
const int mask = hdr->huffman_mask_;
|
const int mask = hdr->huffman_mask_;
|
||||||
assert(htree_group != NULL);
|
assert(htree_group != NULL);
|
||||||
|
assert(pos < end);
|
||||||
assert(last_row <= height);
|
assert(last_row <= height);
|
||||||
assert(Is8bOptimizable(hdr));
|
assert(Is8bOptimizable(hdr));
|
||||||
|
|
||||||
@ -830,6 +831,7 @@ static int DecodeImageData(VP8LDecoder* const dec, uint32_t* const data,
|
|||||||
(hdr->color_cache_size_ > 0) ? &hdr->color_cache_ : NULL;
|
(hdr->color_cache_size_ > 0) ? &hdr->color_cache_ : NULL;
|
||||||
const int mask = hdr->huffman_mask_;
|
const int mask = hdr->huffman_mask_;
|
||||||
assert(htree_group != NULL);
|
assert(htree_group != NULL);
|
||||||
|
assert(src < src_end);
|
||||||
assert(src_last <= src_end);
|
assert(src_last <= src_end);
|
||||||
|
|
||||||
while (!br->eos_ && src < src_last) {
|
while (!br->eos_ && src < src_last) {
|
||||||
@ -1294,6 +1296,10 @@ int VP8LDecodeAlphaImageStream(ALPHDecoder* const alph_dec, int last_row) {
|
|||||||
assert(dec->action_ == READ_DATA);
|
assert(dec->action_ == READ_DATA);
|
||||||
assert(last_row <= dec->height_);
|
assert(last_row <= dec->height_);
|
||||||
|
|
||||||
|
if (dec->last_pixel_ == dec->width_ * dec->height_) {
|
||||||
|
return 1; // done
|
||||||
|
}
|
||||||
|
|
||||||
// Decode (with special row processing).
|
// Decode (with special row processing).
|
||||||
return alph_dec->use_8b_decode ?
|
return alph_dec->use_8b_decode ?
|
||||||
DecodeAlphaData(dec, (uint8_t*)dec->pixels_, dec->width_, dec->height_,
|
DecodeAlphaData(dec, (uint8_t*)dec->pixels_, dec->width_, dec->height_,
|
||||||
|
Loading…
Reference in New Issue
Block a user