[FFmpeg-cvslog] smacker: Free memory properly if the init function fails

Martin Storsjö git at videolan.org
Thu Sep 12 13:05:58 CEST 2013


ffmpeg | branch: master | Martin Storsjö <martin at martin.st> | Wed Sep 11 15:55:18 2013 +0300| [f3d57dc69145f1b7acb4870da9ce60378190a1fd] | committer: Martin Storsjö

smacker: Free memory properly if the init function fails

Signed-off-by: Martin Storsjö <martin at martin.st>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=f3d57dc69145f1b7acb4870da9ce60378190a1fd
---

 libavcodec/smacker.c |   44 +++++++++++++++++++++++---------------------
 1 file changed, 23 insertions(+), 21 deletions(-)

diff --git a/libavcodec/smacker.c b/libavcodec/smacker.c
index 9819fa5..c8850d3 100644
--- a/libavcodec/smacker.c
+++ b/libavcodec/smacker.c
@@ -534,6 +534,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) {



More information about the ffmpeg-cvslog mailing list