[FFmpeg-devel] [PATCH v4] lavf/matroskadec: Normalize noncompliant A_QUICKTIME/V_QUICKTIME private data
Mats Peterson
matsp888 at yahoo.com
Sun Jan 10 03:05:49 CET 2016
On 01/10/2016 02:20 AM, Michael Niedermayer wrote:
>> + if (!(track->codec_priv.data = av_realloc(track->codec_priv.data,
>> + track->codec_priv.size + 4)))
>> + return AVERROR(ENOMEM);
>
> in case of this failing the memory is not freed and leaks
>
> see av_reallocp() if you want it to be freed, alternatively the code
> could continue without the move/update
>
OK, but I thought an AVERROR(ENOMEM) eventually causes FFmpeg to exit?
And another thing: I notice the following regarding both av_realloc()
and av_reallocp():
"Pointers originating from the av_malloc() family of functions must not
be passed to av_realloc(). The former can be implemented using
memalign() (or other functions), and there is no guarantee that pointers
from such functions can be passed to realloc() at all. The situation is
undefined according to POSIX and may crash with some libc implementations."
I suppose that ebml_read_binary() in matroskadec.c is the function used
to read the private data, and it allocates memory using
av_fast_padded_malloc() for this. Is it safe to reallocate a pointer
from this function then? So far I've had no problems, but of course I
want to be absolutely sure.
Mats
More information about the ffmpeg-devel
mailing list