From f3d57dc69145f1b7acb4870da9ce60378190a1fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Storsj=C3=B6?= Date: Wed, 11 Sep 2013 15:55:18 +0300 Subject: [PATCH] smacker: Free memory properly if the init function fails MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Martin Storsjö --- libavcodec/smacker.c | 44 +++++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/libavcodec/smacker.c b/libavcodec/smacker.c index 9819fa58cc..c8850d3368 100644 --- a/libavcodec/smacker.c +++ b/libavcodec/smacker.c @@ -532,6 +532,26 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, +/* + * + * Uninit smacker decoder + * + */ +static av_cold int decode_end(AVCodecContext *avctx) +{ + SmackVContext * const smk = avctx->priv_data; + + av_freep(&smk->mmap_tbl); + av_freep(&smk->mclr_tbl); + av_freep(&smk->full_tbl); + av_freep(&smk->type_tbl); + + av_frame_unref(&smk->pic); + + return 0; +} + + /* * * Init smacker decoder @@ -552,34 +572,16 @@ static av_cold int decode_init(AVCodecContext *avctx) return -1; } - if (decode_header_trees(c)) + if (decode_header_trees(c)) { + decode_end(avctx); return -1; + } return 0; } -/* - * - * Uninit smacker decoder - * - */ -static av_cold int decode_end(AVCodecContext *avctx) -{ - SmackVContext * const smk = avctx->priv_data; - - av_freep(&smk->mmap_tbl); - av_freep(&smk->mclr_tbl); - av_freep(&smk->full_tbl); - av_freep(&smk->type_tbl); - - av_frame_unref(&smk->pic); - - return 0; -} - - static av_cold int smka_decode_init(AVCodecContext *avctx) { if (avctx->channels < 1 || avctx->channels > 2) {