Commit 3c29f68b authored by Paul B Mahol's avatar Paul B Mahol

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

Signed-off-by: 's avatarPaul B Mahol <onemda@gmail.com>
parent 16ba6a8a
...@@ -404,7 +404,7 @@ static int expand(AVFilterContext *ctx, double *pz, int nb, double *coeffs) ...@@ -404,7 +404,7 @@ static int expand(AVFilterContext *ctx, double *pz, int nb, double *coeffs)
static int convert_zp2tf(AVFilterContext *ctx, int channels) static int convert_zp2tf(AVFilterContext *ctx, int channels)
{ {
AudioIIRContext *s = ctx->priv; AudioIIRContext *s = ctx->priv;
int ch, i, j, ret; int ch, i, j, ret = 0;
for (ch = 0; ch < channels; ch++) { for (ch = 0; ch < channels; ch++) {
IIRChannel *iir = &s->iir[ch]; IIRChannel *iir = &s->iir[ch];
...@@ -412,21 +412,19 @@ static int convert_zp2tf(AVFilterContext *ctx, int channels) ...@@ -412,21 +412,19 @@ static int convert_zp2tf(AVFilterContext *ctx, int channels)
topc = av_calloc((iir->nb_ab[0] + 1) * 2, sizeof(*topc)); topc = av_calloc((iir->nb_ab[0] + 1) * 2, sizeof(*topc));
botc = av_calloc((iir->nb_ab[1] + 1) * 2, sizeof(*botc)); botc = av_calloc((iir->nb_ab[1] + 1) * 2, sizeof(*botc));
if (!topc || !botc) if (!topc || !botc) {
return AVERROR(ENOMEM); ret = AVERROR(ENOMEM);
goto fail;
}
ret = expand(ctx, iir->ab[0], iir->nb_ab[0], botc); ret = expand(ctx, iir->ab[0], iir->nb_ab[0], botc);
if (ret < 0) { if (ret < 0) {
av_free(topc); goto fail;
av_free(botc);
return ret;
} }
ret = expand(ctx, iir->ab[1], iir->nb_ab[1], topc); ret = expand(ctx, iir->ab[1], iir->nb_ab[1], topc);
if (ret < 0) { if (ret < 0) {
av_free(topc); goto fail;
av_free(botc);
return ret;
} }
for (j = 0, i = iir->nb_ab[1]; i >= 0; j++, i--) { for (j = 0, i = iir->nb_ab[1]; i >= 0; j++, i--) {
...@@ -439,11 +437,14 @@ static int convert_zp2tf(AVFilterContext *ctx, int channels) ...@@ -439,11 +437,14 @@ static int convert_zp2tf(AVFilterContext *ctx, int channels)
} }
iir->nb_ab[0]++; iir->nb_ab[0]++;
fail:
av_free(topc); av_free(topc);
av_free(botc); av_free(botc);
if (ret < 0)
break;
} }
return 0; return ret;
} }
static int decompose_zp2biquads(AVFilterContext *ctx, int channels) static int decompose_zp2biquads(AVFilterContext *ctx, int channels)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment