[FFmpeg-cvslog] lavc/libxvid: fix mem leak in case of init failure

Lukasz Marek git at videolan.org
Mon Nov 24 04:17:02 CET 2014


ffmpeg | branch: master | Lukasz Marek <lukasz.m.luki2 at gmail.com> | Mon Nov 24 01:10:49 2014 +0100| [efe34e87ebf5119bbfabe353f9eb3a99c4c6d266] | committer: Lukasz Marek

lavc/libxvid: fix mem leak in case of init failure

Signed-off-by: Lukasz Marek <lukasz.m.luki2 at gmail.com>

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

 libavcodec/libxvid.c |   11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/libavcodec/libxvid.c b/libavcodec/libxvid.c
index aee9dac..020af32 100644
--- a/libavcodec/libxvid.c
+++ b/libavcodec/libxvid.c
@@ -359,7 +359,7 @@ static void xvid_correct_framerate(AVCodecContext *avctx)
 
 static av_cold int xvid_encode_init(AVCodecContext *avctx)
 {
-    int xerr, i;
+    int xerr, i, ret = -1;
     int xvid_flags = avctx->flags;
     struct xvid_context *x = avctx->priv_data;
     uint16_t *intra, *inter;
@@ -659,13 +659,15 @@ static av_cold int xvid_encode_init(AVCodecContext *avctx)
 
     x->encoder_handle  = xvid_enc_create.handle;
     avctx->coded_frame = av_frame_alloc();
-    if (!avctx->coded_frame)
-        return AVERROR(ENOMEM);
+    if (!avctx->coded_frame) {
+        ret = AVERROR(ENOMEM);
+        goto fail;
+    }
 
     return 0;
 fail:
     xvid_encode_close(avctx);
-    return -1;
+    return ret;
 }
 
 static int xvid_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
@@ -812,6 +814,7 @@ static av_cold int xvid_encode_close(AVCodecContext *avctx)
     av_freep(&x->twopassfile);
     av_freep(&x->intra_matrix);
     av_freep(&x->inter_matrix);
+    av_frame_free(&avctx->coded_frame);
 
     return 0;
 }



More information about the ffmpeg-cvslog mailing list