ffmpeg | branch: master | Paul B Mahol <one...@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 <one...@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) _______________________________________________ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog