[FFmpeg-devel] [PATCH] avfilter/formats: fix leak of channel_layouts on error
Ganesh Ajjanagadde
gajjanag at mit.edu
Tue Jan 5 20:41:15 CET 2016
On Tue, Jan 5, 2016 at 11:16 AM, 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 11:06 AM, Paul B Mahol <onemda at gmail.com> wrote:
>>> On 1/2/16, Ganesh Ajjanagadde <gajjanag at mit.edu> wrote:
>>> [...]
>>>>
>>>> Thanks a lot for addressing this. But a client may not necessarily
>>>> attempt initialization of the channel layouts first, so instead of
>>>> do_nothing calls, shouldn't there be an equivalent for
>>>> AVFilterFormats*?
>>>>
>>>> Of course, the commit message will need rewording.
>>>
>>> After second look I see no need for this code, the present code already
>>> frees all allocated memory.
>>>
>>> Whichever instructions you used to expose leaks were flawed.
>>
>> care to explain: I did not know valgrind (as well as coverity) had
>> such simple bugs if you are indeed correct?
>
> I didn't claim valgrind is buggy in this case, instead the way to
> trigger leak is wrong.
>
> The ->list translates to ->channel_layouts and its freed on error IIRC.
Ok. Let us examine this carefully, and patiently step by step:
1. Patch to trigger leaks:
diff --git a/libavfilter/formats.c b/libavfilter/formats.c
index a2b19e7..dde30ec 100644
--- a/libavfilter/formats.c
+++ b/libavfilter/formats.c
@@ -422,7 +422,8 @@ AVFilterChannelLayouts *ff_all_channel_counts(void)
if (!f || !ref)
\
return AVERROR(ENOMEM);
\
\
- tmp = av_realloc_array(f->refs, sizeof(*f->refs), f->refcount +
1); \
+ /*tmp = av_realloc_array(f->refs, sizeof(*f->refs), f->refcount +
1);*/ \
+ tmp = NULL;
\
if (!tmp) {
\
unref_fn(&f);
\
return AVERROR(ENOMEM);
\
I think you agree that this is a correct way to simulate.
2. Run valgrind before and after this patch, with the command:
valgrind -v --leak-check=full --show-leak-kinds=all
--log-file=/tmp/avfilter_leak ./ffmpeg_g -i
~/samples/h264/crop-to-container-dims-canon.mov -af compensationdelay
-f null -
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
More information about the ffmpeg-devel
mailing list