diff mbox

[FFmpeg-devel,1/2] avcodec/mpeg4_unpack_bframes: reduce code duplication

Message ID 20180319022533.7048-1-jamrial@gmail.com
State Accepted
Commit bd60116794b4baaf9a6fedfc68cb1ac4a383bb2d
Headers show

Commit Message

James Almer March 19, 2018, 2:25 a.m. UTC
Also fixes one potential leak of side data in out if
the av_packet_from_data() call fails.

Signed-off-by: James Almer <jamrial@gmail.com>
---
 libavcodec/mpeg4_unpack_bframes_bsf.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

Comments

Michael Niedermayer March 20, 2018, 7:30 p.m. UTC | #1
On Sun, Mar 18, 2018 at 11:25:32PM -0300, James Almer wrote:
> Also fixes one potential leak of side data in out if
> the av_packet_from_data() call fails.
> 
> Signed-off-by: James Almer <jamrial@gmail.com>
> ---
>  libavcodec/mpeg4_unpack_bframes_bsf.c | 20 ++++++++++----------
>  1 file changed, 10 insertions(+), 10 deletions(-)

should be ok

thx

[...]
James Almer March 20, 2018, 8:40 p.m. UTC | #2
On 3/20/2018 4:30 PM, Michael Niedermayer wrote:
> On Sun, Mar 18, 2018 at 11:25:32PM -0300, James Almer wrote:
>> Also fixes one potential leak of side data in out if
>> the av_packet_from_data() call fails.
>>
>> Signed-off-by: James Almer <jamrial@gmail.com>
>> ---
>>  libavcodec/mpeg4_unpack_bframes_bsf.c | 20 ++++++++++----------
>>  1 file changed, 10 insertions(+), 10 deletions(-)
> 
> should be ok
> 
> thx

Pushed.
diff mbox

Patch

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)