diff options
author | James Almer <jamrial@gmail.com> | 2018-03-18 23:25:32 -0300 |
---|---|---|
committer | James Almer <jamrial@gmail.com> | 2018-03-20 17:39:04 -0300 |
commit | bd60116794b4baaf9a6fedfc68cb1ac4a383bb2d (patch) | |
tree | e16e60310dc677a88ca0a6c8cfcb5d1fc4bfaaba /libavcodec | |
parent | f18f9734694ea0761f94d57685f342b690d563b0 (diff) | |
download | ffmpeg-bd60116794b4baaf9a6fedfc68cb1ac4a383bb2d.tar.gz |
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 <michael@niedermayer.cc>
Signed-off-by: James Almer <jamrial@gmail.com>
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/mpeg4_unpack_bframes_bsf.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/libavcodec/mpeg4_unpack_bframes_bsf.c b/libavcodec/mpeg4_unpack_bframes_bsf.c index e227f58ec6..ba970794c5 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) |