Commit efe34e87 authored by Lukasz Marek's avatar Lukasz Marek

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

Signed-off-by: 's avatarLukasz Marek <lukasz.m.luki2@gmail.com>
parent 5182a2a2
...@@ -359,7 +359,7 @@ static void xvid_correct_framerate(AVCodecContext *avctx) ...@@ -359,7 +359,7 @@ static void xvid_correct_framerate(AVCodecContext *avctx)
static av_cold int xvid_encode_init(AVCodecContext *avctx) static av_cold int xvid_encode_init(AVCodecContext *avctx)
{ {
int xerr, i; int xerr, i, ret = -1;
int xvid_flags = avctx->flags; int xvid_flags = avctx->flags;
struct xvid_context *x = avctx->priv_data; struct xvid_context *x = avctx->priv_data;
uint16_t *intra, *inter; uint16_t *intra, *inter;
...@@ -659,13 +659,15 @@ static av_cold int xvid_encode_init(AVCodecContext *avctx) ...@@ -659,13 +659,15 @@ static av_cold int xvid_encode_init(AVCodecContext *avctx)
x->encoder_handle = xvid_enc_create.handle; x->encoder_handle = xvid_enc_create.handle;
avctx->coded_frame = av_frame_alloc(); avctx->coded_frame = av_frame_alloc();
if (!avctx->coded_frame) if (!avctx->coded_frame) {
return AVERROR(ENOMEM); ret = AVERROR(ENOMEM);
goto fail;
}
return 0; return 0;
fail: fail:
xvid_encode_close(avctx); xvid_encode_close(avctx);
return -1; return ret;
} }
static int xvid_encode_frame(AVCodecContext *avctx, AVPacket *pkt, static int xvid_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
...@@ -812,6 +814,7 @@ static av_cold int xvid_encode_close(AVCodecContext *avctx) ...@@ -812,6 +814,7 @@ static av_cold int xvid_encode_close(AVCodecContext *avctx)
av_freep(&x->twopassfile); av_freep(&x->twopassfile);
av_freep(&x->intra_matrix); av_freep(&x->intra_matrix);
av_freep(&x->inter_matrix); av_freep(&x->inter_matrix);
av_frame_free(&avctx->coded_frame);
return 0; return 0;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment