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)