Browse Source

avcodec/gifdec: truncate too big width/height for invalid gif files

Fixes #6874.
tags/n4.2
Paul B Mahol 7 years ago
parent
commit
8affd753c8
1 changed files with 12 additions and 4 deletions
  1. +12
    -4
      libavcodec/gifdec.c

+ 12
- 4
libavcodec/gifdec.c View File

@@ -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) {


Loading…
Cancel
Save