mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-21 10:55:51 +02:00
webp: ensure that each transform is only used once
According to the WebP Lossless Bitstream Specification "each transform is allowed to be used only once". If a transform is more than once this can lead to memory corruption. Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
f455c8fdef
commit
c089e720c1
@ -1104,7 +1104,7 @@ static int vp8_lossless_decode_frame(AVCodecContext *avctx, AVFrame *p,
|
||||
unsigned int data_size, int is_alpha_chunk)
|
||||
{
|
||||
WebPContext *s = avctx->priv_data;
|
||||
int w, h, ret, i;
|
||||
int w, h, ret, i, used;
|
||||
|
||||
if (!is_alpha_chunk) {
|
||||
s->lossless = 1;
|
||||
@ -1154,8 +1154,16 @@ static int vp8_lossless_decode_frame(AVCodecContext *avctx, AVFrame *p,
|
||||
/* parse transformations */
|
||||
s->nb_transforms = 0;
|
||||
s->reduced_width = 0;
|
||||
used = 0;
|
||||
while (get_bits1(&s->gb)) {
|
||||
enum TransformType transform = get_bits(&s->gb, 2);
|
||||
if (used & (1 << transform)) {
|
||||
av_log(avctx, AV_LOG_ERROR, "Transform %d used more than once\n",
|
||||
transform);
|
||||
ret = AVERROR_INVALIDDATA;
|
||||
goto free_and_return;
|
||||
}
|
||||
used |= (1 << transform);
|
||||
s->transforms[s->nb_transforms++] = transform;
|
||||
switch (transform) {
|
||||
case PREDICTOR_TRANSFORM:
|
||||
|
Loading…
Reference in New Issue
Block a user