avfilter: do not leak AVFrame on failed buffer allocation
authorPaul B Mahol <onemda@gmail.com>
Sat, 24 Jun 2017 16:36:46 +0000 (18:36 +0200)
committerPaul B Mahol <onemda@gmail.com>
Sat, 24 Jun 2017 17:15:57 +0000 (19:15 +0200)
Signed-off-by: Paul B Mahol <onemda@gmail.com>
libavfilter/af_aphaser.c
libavfilter/af_aresample.c
libavfilter/af_atempo.c
libavfilter/af_bs2b.c
libavfilter/af_pan.c
libavfilter/af_volume.c
libavfilter/vf_eq.c
libavfilter/vf_fftfilt.c

index 780407e..dcffc21 100644 (file)
@@ -248,8 +248,10 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *inbuf)
         outbuf = inbuf;
     } else {
         outbuf = ff_get_audio_buffer(inlink, inbuf->nb_samples);
-        if (!outbuf)
+        if (!outbuf) {
+            av_frame_free(&inbuf);
             return AVERROR(ENOMEM);
+        }
         av_frame_copy_props(outbuf, inbuf);
     }
 
index 0216432..ef10621 100644 (file)
@@ -195,8 +195,10 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *insamplesref)
 
     outsamplesref = ff_get_audio_buffer(outlink, n_out);
 
-    if(!outsamplesref)
+    if(!outsamplesref) {
+        av_frame_free(&insamplesref);
         return AVERROR(ENOMEM);
+    }
 
     av_frame_copy_props(outsamplesref, insamplesref);
     outsamplesref->format                = outlink->format;
index d909105..7641022 100644 (file)
@@ -1090,8 +1090,10 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *src_buffer)
     while (src < src_end) {
         if (!atempo->dst_buffer) {
             atempo->dst_buffer = ff_get_audio_buffer(outlink, n_out);
-            if (!atempo->dst_buffer)
+            if (!atempo->dst_buffer) {
+                av_frame_free(&src_buffer);
                 return AVERROR(ENOMEM);
+            }
             av_frame_copy_props(atempo->dst_buffer, src_buffer);
 
             atempo->dst = atempo->dst_buffer->data[0];
index 531a27b..b7cfd38 100644 (file)
@@ -134,8 +134,10 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
         out_frame = frame;
     } else {
         out_frame = ff_get_audio_buffer(inlink, frame->nb_samples);
-        if (!out_frame)
+        if (!out_frame) {
+            av_frame_free(&frame);
             return AVERROR(ENOMEM);
+        }
         av_frame_copy(out_frame, frame);
         ret = av_frame_copy_props(out_frame, frame);
         if (ret < 0) {
index 63d7750..23b2941 100644 (file)
@@ -383,8 +383,10 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *insamples)
     AVFrame *outsamples = ff_get_audio_buffer(outlink, n);
     PanContext *pan = inlink->dst->priv;
 
-    if (!outsamples)
+    if (!outsamples) {
+        av_frame_free(&insamples);
         return AVERROR(ENOMEM);
+    }
     swr_convert(pan->swr, outsamples->extended_data, n,
                 (void *)insamples->extended_data, n);
     av_frame_copy_props(outsamples, insamples);
index 9ed2dba..3d76f12 100644 (file)
@@ -411,8 +411,10 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *buf)
         out_buf = buf;
     } else {
         out_buf = ff_get_audio_buffer(inlink, nb_samples);
-        if (!out_buf)
+        if (!out_buf) {
+            av_frame_free(&buf);
             return AVERROR(ENOMEM);
+        }
         ret = av_frame_copy_props(out_buf, buf);
         if (ret < 0) {
             av_frame_free(&out_buf);
index e8b4a46..2c4c7e4 100644 (file)
@@ -259,8 +259,10 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
     int i;
 
     out = ff_get_video_buffer(outlink, inlink->w, inlink->h);
-    if (!out)
+    if (!out) {
+        av_frame_free(&in);
         return AVERROR(ENOMEM);
+    }
 
     av_frame_copy_props(out, in);
     desc = av_pix_fmt_desc_get(inlink->format);
index c0c5eb4..8a47ed5 100644 (file)
@@ -255,8 +255,10 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
     int i, j, plane;
 
     out = ff_get_video_buffer(outlink, inlink->w, inlink->h);
-    if (!out)
+    if (!out) {
+        av_frame_free(&in);
         return AVERROR(ENOMEM);
+    }
 
     av_frame_copy_props(out, in);