[FFmpeg-cvslog] avfilter/af_aiir: do not leak memory on failure in convert_zp2tf()

Paul B Mahol git at videolan.org
Wed Jan 10 19:49:29 EET 2018


ffmpeg | branch: master | Paul B Mahol <onemda at gmail.com> | Wed Jan 10 18:38:01 2018 +0100| [3c29f68b4db316c5d2b126619220cfa4255eacd6] | committer: Paul B Mahol

avfilter/af_aiir: do not leak memory on failure in convert_zp2tf()

Signed-off-by: Paul B Mahol <onemda at gmail.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=3c29f68b4db316c5d2b126619220cfa4255eacd6
---

 libavfilter/af_aiir.c | 21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)

diff --git a/libavfilter/af_aiir.c b/libavfilter/af_aiir.c
index 0bf9e4f844..c60f339411 100644
--- a/libavfilter/af_aiir.c
+++ b/libavfilter/af_aiir.c
@@ -404,7 +404,7 @@ static int expand(AVFilterContext *ctx, double *pz, int nb, double *coeffs)
 static int convert_zp2tf(AVFilterContext *ctx, int channels)
 {
     AudioIIRContext *s = ctx->priv;
-    int ch, i, j, ret;
+    int ch, i, j, ret = 0;
 
     for (ch = 0; ch < channels; ch++) {
         IIRChannel *iir = &s->iir[ch];
@@ -412,21 +412,19 @@ static int convert_zp2tf(AVFilterContext *ctx, int channels)
 
         topc = av_calloc((iir->nb_ab[0] + 1) * 2, sizeof(*topc));
         botc = av_calloc((iir->nb_ab[1] + 1) * 2, sizeof(*botc));
-        if (!topc || !botc)
-            return AVERROR(ENOMEM);
+        if (!topc || !botc) {
+            ret = AVERROR(ENOMEM);
+            goto fail;
+        }
 
         ret = expand(ctx, iir->ab[0], iir->nb_ab[0], botc);
         if (ret < 0) {
-            av_free(topc);
-            av_free(botc);
-            return ret;
+            goto fail;
         }
 
         ret = expand(ctx, iir->ab[1], iir->nb_ab[1], topc);
         if (ret < 0) {
-            av_free(topc);
-            av_free(botc);
-            return ret;
+            goto fail;
         }
 
         for (j = 0, i = iir->nb_ab[1]; i >= 0; j++, i--) {
@@ -439,11 +437,14 @@ static int convert_zp2tf(AVFilterContext *ctx, int channels)
         }
         iir->nb_ab[0]++;
 
+fail:
         av_free(topc);
         av_free(botc);
+        if (ret < 0)
+            break;
     }
 
-    return 0;
+    return ret;
 }
 
 static int decompose_zp2biquads(AVFilterContext *ctx, int channels)



More information about the ffmpeg-cvslog mailing list