diff options
author | Michael Niedermayer <michael@niedermayer.cc> | 2019-03-09 22:22:55 +0100 |
---|---|---|
committer | Michael Niedermayer <michael@niedermayer.cc> | 2019-03-10 20:42:59 +0100 |
commit | 0be0197f49a5ac78c0f8be34fe66dd7657c83c23 (patch) | |
tree | e7abde822f596b445067a463bf036b30339841ed | |
parent | 1144d5c96d2ade86b4c3ea98b949dbd3ee926636 (diff) | |
download | ffmpeg-0be0197f49a5ac78c0f8be34fe66dd7657c83c23.tar.gz |
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 <onemda@gmail.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
-rw-r--r-- | libavcodec/imm4.c | 12 |
1 files 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); |