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