X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fgifdec.c;h=1906a4c738cbf2cd42ce3fdf830f7854e2d1380d;hb=e847cabb60a29c354512664022ad6833a907bf1b;hp=54f1d4c0ba7fdbf8129f21d535a731c8ccd6851d;hpb=203bbaccfaaeac9548862e83792d38509a8c8167;p=ffmpeg diff --git a/libavcodec/gifdec.c b/libavcodec/gifdec.c index 54f1d4c0ba7..1906a4c738c 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) { @@ -505,7 +513,7 @@ FF_ENABLE_DEPRECATION_WARNINGS return AVERROR_INVALIDDATA; } - if ((ret = ff_reget_buffer(avctx, s->frame)) < 0) + if ((ret = ff_reget_buffer(avctx, s->frame, 0)) < 0) return ret; s->frame->pict_type = AV_PICTURE_TYPE_P;