From 0be0197f49a5ac78c0f8be34fe66dd7657c83c23 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Sat, 9 Mar 2019 22:22:55 +0100 Subject: [PATCH] avcodec/imm4: Unreference previous frame on frame size change Fixes: Out of array access Fixes: 13552/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_IMM4_fuzzer-5767949648920576 Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg Reviewed-by: Paul B Mahol Signed-off-by: Michael Niedermayer --- libavcodec/imm4.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/libavcodec/imm4.c b/libavcodec/imm4.c index b66689acab..1a4d0decd7 100644 --- a/libavcodec/imm4.c +++ b/libavcodec/imm4.c @@ -446,11 +446,13 @@ static int decode_frame(AVCodecContext *avctx, void *data, return AVERROR_PATCHWELCOME; } - if (!frame->key_frame && - (avctx->width != width || - avctx->height != height)) { - av_log(avctx, AV_LOG_ERROR, "Frame size change is unsupported.\n"); - return AVERROR_INVALIDDATA; + if (avctx->width != width || + avctx->height != height) { + if (!frame->key_frame) { + av_log(avctx, AV_LOG_ERROR, "Frame size change is unsupported.\n"); + return AVERROR_INVALIDDATA; + } + av_frame_unref(s->prev_frame); } ret = ff_set_dimensions(avctx, width, height);