diff options
author | Paul B Mahol <onemda@gmail.com> | 2018-12-10 13:32:10 +0100 |
---|---|---|
committer | Paul B Mahol <onemda@gmail.com> | 2018-12-10 17:56:32 +0100 |
commit | 8affd753c86d7e2ddefd24beafe4e892914c63bc (patch) | |
tree | a0b58718e7a88d47ed31d12a4c5566546608561a /libavcodec/gifdec.c | |
parent | 14156e607d4941079a400c3969173518ebb6f6ed (diff) | |
download | ffmpeg-8affd753c86d7e2ddefd24beafe4e892914c63bc.tar.gz |
avcodec/gifdec: truncate too big width/height for invalid gif files
Fixes #6874.
Diffstat (limited to 'libavcodec/gifdec.c')
-rw-r--r-- | libavcodec/gifdec.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/libavcodec/gifdec.c b/libavcodec/gifdec.c index 54f1d4c0ba..2115da163f 100644 --- a/libavcodec/gifdec.c +++ b/libavcodec/gifdec.c @@ -179,12 +179,20 @@ static int gif_read_image(GifState *s, AVFrame *frame) } /* verify that all the image is inside the screen dimensions */ - if (!width || width > s->screen_width || left >= s->screen_width) { - av_log(s->avctx, AV_LOG_ERROR, "Invalid image width.\n"); + if (!width || width > s->screen_width) { + av_log(s->avctx, AV_LOG_WARNING, "Invalid image width: %d, truncating.\n", width); + width = s->screen_width; + } + if (left >= s->screen_width) { + av_log(s->avctx, AV_LOG_ERROR, "Invalid left position: %d.\n", left); return AVERROR_INVALIDDATA; } - if (!height || height > s->screen_height || top >= s->screen_height) { - av_log(s->avctx, AV_LOG_ERROR, "Invalid image height.\n"); + if (!height || height > s->screen_height) { + av_log(s->avctx, AV_LOG_WARNING, "Invalid image height: %d, truncating.\n", height); + height = s->screen_height; + } + if (top >= s->screen_height) { + av_log(s->avctx, AV_LOG_ERROR, "Invalid top position: %d.\n", top); return AVERROR_INVALIDDATA; } if (left + width > s->screen_width) { |