• Andreas Rheinhardt's avatar
    avutil/mem: Handle fast allocations near UINT_MAX properly · aca09ed7
    Andreas Rheinhardt authored
    av_fast_realloc and av_fast_mallocz? store the size of
    the objects they allocate in an unsigned. Yet they overallocate
    and currently they can allocate more than UINT_MAX bytes
    in case a user has requested a size of about UINT_MAX * 16 / 17
    or more if SIZE_MAX > UINT_MAX (and if the user increased
    max_alloc_size via av_max_alloc). In this case it is impossible
    to store the true size of the buffer via the unsigned*;
    future requests are likely to use the (re)allocation codepath
    even if the buffer is actually large enough because of
    the incorrect size.
    
    Fix this by ensuring that the actually allocated size
    always fits into an unsigned. (This entails erroring out
    in case the user requested more than UINT_MAX.)
    Reviewed-by: 's avatarTomas Härdin <tjoppen@acc.umu.se>
    Reviewed-by: 's avatarAnton Khirnov <anton@khirnov.net>
    Signed-off-by: 's avatarAndreas Rheinhardt <andreas.rheinhardt@outlook.com>
    aca09ed7
mem.c 13 KB