aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2014-02-26 12:11:33 +0100
committerMichael Niedermayer <michaelni@gmx.at>2014-02-26 12:11:33 +0100
commit27ba05adbc231cbf04148cf3e9f872e6f65dca40 (patch)
treed09c00504daf539a77f0b23605b83367f09988a9
parent8b804859604df7b4e06ea77985c9051d227dfa62 (diff)
downloadffmpeg-27ba05adbc231cbf04148cf3e9f872e6f65dca40.tar.gz
avfilter/af_compand: merge uninit() calls on error from af_compand_fork.c
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r--libavfilter/af_compand.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/libavfilter/af_compand.c b/libavfilter/af_compand.c
index a02e586092..7783fcae34 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;