[FFmpeg-devel] [PATCH] avfilter/formats: fix leak of formats on error
Paul B Mahol
onemda at gmail.com
Tue Jan 5 22:54:52 CET 2016
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?
More information about the ffmpeg-devel
mailing list