[FFmpeg-devel] [PATCH] avfilter/formats: fix leak of formats on error

Ganesh Ajjanagadde gajjanag at mit.edu
Tue Jan 5 22:39:48 CET 2016


On Tue, Jan 5, 2016 at 12:11 PM, Paul B Mahol <onemda at gmail.com> wrote:
> Signed-off-by: Paul B Mahol <onemda at gmail.com>
> ---
>  libavfilter/formats.c | 4 ++++
>  1 file changed, 4 insertions(+)
>
> diff --git a/libavfilter/formats.c b/libavfilter/formats.c
> index a2b19e7..f12dcf4 100644
> --- a/libavfilter/formats.c
> +++ b/libavfilter/formats.c
> @@ -518,6 +518,8 @@ void ff_formats_changeref(AVFilterFormats **oldref, AVFilterFormats **newref)
>              int ret = ref_fn(fmts, &ctx->inputs[i]->out_fmts);      \
>              if (ret < 0) {                                          \
>                  unref_fn(&fmts);                                    \
> +                av_freep(&fmts->list);                              \
> +                av_freep(&fmts);                                    \
>                  return ret;                                         \
>              }                                                       \
>              count++;                                                \
> @@ -528,6 +530,8 @@ void ff_formats_changeref(AVFilterFormats **oldref, AVFilterFormats **newref)
>              int ret = ref_fn(fmts, &ctx->outputs[i]->in_fmts);      \
>              if (ret < 0) {                                          \
>                  unref_fn(&fmts);                                    \
> +                av_freep(&fmts->list);                              \
> +                av_freep(&fmts);                                    \
>                  return ret;                                         \
>              }                                                       \
>              count++;                                                \

This is a good effort, and I favor it. However, note that no matter
what is done here (ie at the API level in avfilter/formats), it will
not fix all possible error paths in the filters as far as I can tell.
The reason roughly boils down to the calls being able to free their
own stuff on failure, but they are not able to free other things, e.g
samplerates functions can't free channel layouts.

Or put in other words, if one wants to be absolutely correct, a ton of
filters will need updating unfortunately.

> --
> 1.9.1
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


More information about the ffmpeg-devel mailing list