From bd60116794b4baaf9a6fedfc68cb1ac4a383bb2d Mon Sep 17 00:00:00 2001 From: James Almer Date: Sun, 18 Mar 2018 23:25:32 -0300 Subject: [PATCH] avcodec/mpeg4_unpack_bframes: reduce code duplication Also fixes one potential leak of side data in out if the av_packet_from_data() call fails. Reviewed-by: Michael Niedermayer Signed-off-by: James Almer --- libavcodec/mpeg4_unpack_bframes_bsf.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/libavcodec/mpeg4_unpack_bframes_bsf.c b/libavcodec/mpeg4_unpack_bframes_bsf.c index e227f58ec6d..ba970794c5b 100644 --- a/libavcodec/mpeg4_unpack_bframes_bsf.c +++ b/libavcodec/mpeg4_unpack_bframes_bsf.c @@ -108,8 +108,8 @@ static int mpeg4_unpack_bframes_filter(AVBSFContext *ctx, AVPacket *out) s->b_frame_buf = create_new_buffer(in->data + pos_vop2, s->b_frame_buf_size); if (!s->b_frame_buf) { s->b_frame_buf_size = 0; - av_packet_free(&in); - return AVERROR(ENOMEM); + ret = AVERROR(ENOMEM); + goto fail; } } @@ -122,14 +122,12 @@ static int mpeg4_unpack_bframes_filter(AVBSFContext *ctx, AVPacket *out) /* use frame from BSFContext */ ret = av_packet_copy_props(out, in); if (ret < 0) { - av_packet_free(&in); - return ret; + goto fail; } ret = av_packet_from_data(out, s->b_frame_buf, s->b_frame_buf_size); if (ret < 0) { - av_packet_free(&in); - return ret; + goto fail; } if (in->size <= MAX_NVOP_SIZE) { /* N-VOP */ @@ -142,9 +140,8 @@ static int mpeg4_unpack_bframes_filter(AVBSFContext *ctx, AVPacket *out) s->b_frame_buf = create_new_buffer(in->data, in->size); if (!s->b_frame_buf) { s->b_frame_buf_size = 0; - av_packet_unref(out); - av_packet_free(&in); - return AVERROR(ENOMEM); + ret = AVERROR(ENOMEM); + goto fail; } } } else if (nb_vop >= 2) { @@ -161,9 +158,12 @@ static int mpeg4_unpack_bframes_filter(AVBSFContext *ctx, AVPacket *out) av_packet_move_ref(out, in); } +fail: + if (ret < 0) + av_packet_unref(out); av_packet_free(&in); - return 0; + return ret; } static int mpeg4_unpack_bframes_init(AVBSFContext *ctx) -- 2.39.2