[FFmpeg-cvslog] avfilter/af_compand: merge uninit() calls on error from af_compand_fork.c

Michael Niedermayer git at videolan.org
Wed Feb 26 12:17:25 CET 2014


ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Wed Feb 26 12:11:33 2014 +0100| [27ba05adbc231cbf04148cf3e9f872e6f65dca40] | committer: Michael Niedermayer

avfilter/af_compand: merge uninit() calls on error from af_compand_fork.c

Signed-off-by: Michael Niedermayer <michaelni at gmx.at>

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

 libavfilter/af_compand.c |   15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/libavfilter/af_compand.c b/libavfilter/af_compand.c
index a02e586..7783fca 100644
--- a/libavfilter/af_compand.c
+++ b/libavfilter/af_compand.c
@@ -324,16 +324,20 @@ static int config_output(AVFilterLink *outlink)
     s->nb_segments = (nb_points + 4) * 2;
     s->segments = av_mallocz_array(s->nb_segments, sizeof(*s->segments));
 
-    if (!s->channels || !s->segments)
+    if (!s->channels || !s->segments) {
+        uninit(ctx);
         return AVERROR(ENOMEM);
+    }
 
     p = s->attacks;
     for (i = 0, new_nb_items = 0; i < nb_attacks; i++) {
         char *tstr = av_strtok(p, " |", &saveptr);
         p = NULL;
         new_nb_items += sscanf(tstr, "%lf", &s->channels[i].attack) == 1;
-        if (s->channels[i].attack < 0)
+        if (s->channels[i].attack < 0) {
+            uninit(ctx);
             return AVERROR(EINVAL);
+        }
     }
     nb_attacks = new_nb_items;
 
@@ -342,8 +346,10 @@ static int config_output(AVFilterLink *outlink)
         char *tstr = av_strtok(p, " |", &saveptr);
         p = NULL;
         new_nb_items += sscanf(tstr, "%lf", &s->channels[i].decay) == 1;
-        if (s->channels[i].decay < 0)
+        if (s->channels[i].decay < 0) {
+            uninit(ctx);
             return AVERROR(EINVAL);
+        }
     }
     nb_decays = new_nb_items;
 
@@ -351,6 +357,7 @@ static int config_output(AVFilterLink *outlink)
         av_log(ctx, AV_LOG_ERROR,
                 "Number of attacks %d differs from number of decays %d.\n",
                 nb_attacks, nb_decays);
+        uninit(ctx);
         return AVERROR(EINVAL);
     }
 
@@ -362,11 +369,13 @@ static int config_output(AVFilterLink *outlink)
         if (sscanf(tstr, "%lf/%lf", &S(i).x, &S(i).y) != 2) {
             av_log(ctx, AV_LOG_ERROR,
                     "Invalid and/or missing input/output value.\n");
+            uninit(ctx);
             return AVERROR(EINVAL);
         }
         if (i && S(i - 1).x > S(i).x) {
             av_log(ctx, AV_LOG_ERROR,
                     "Transfer function input values must be increasing.\n");
+            uninit(ctx);
             return AVERROR(EINVAL);
         }
         S(i).y -= S(i).x;



More information about the ffmpeg-cvslog mailing list