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

Ganesh Ajjanagadde gajjanag at mit.edu
Tue Jan 5 22:59:00 CET 2016


On Tue, Jan 5, 2016 at 1:54 PM, Paul B Mahol <onemda at gmail.com> wrote:
> On 1/5/16, Ganesh Ajjanagadde <gajjanag at mit.edu> wrote:
>> 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.
>
> Have example of leak this one doesn't solve?

It will be more difficult to construct (one line patch not possible),
and I would rather not put in the effort for it right now.
Like I said, independent of whether this completely solves the issue
or not, it is a step in the right direction and is good with me.

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


More information about the ffmpeg-devel mailing list