diff options
author | Martin Storsjö <martin@martin.st> | 2012-04-08 17:38:45 +0300 |
---|---|---|
committer | Martin Storsjö <martin@martin.st> | 2012-04-10 11:56:42 +0300 |
commit | 14f063d294a18a31928d2167a66b1087910e14c8 (patch) | |
tree | 5682c191f420cefb276728be328e2f1a28cb60f9 | |
parent | e36b25d1df2ab30540c2d8939c5f2b0d6c059317 (diff) | |
download | ffmpeg-14f063d294a18a31928d2167a66b1087910e14c8.tar.gz |
mem: Consistently return NULL for av_malloc(0)
Plain POSIX malloc(0) is allowed to return either NULL or a
non-NULL pointer. The calling code should be ready to handle
a NULL return as a correct return (instead of a failure) if the size
to allocate was 0 - this makes sure the condition is handled
in a consistent way across platforms.
This also avoids calling posix_memalign(&ptr, 32, 0) on OS X,
which returns an invalid pointer (a non-NULL pointer that causes
crashes when passed to av_free).
Abort in debug mode, to help track down issues related to
incorrect handling of this case.
Signed-off-by: Martin Storsjö <martin@martin.st>
-rw-r--r-- | libavutil/mem.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/libavutil/mem.c b/libavutil/mem.c index b6230cf0e3..bf1a542db8 100644 --- a/libavutil/mem.c +++ b/libavutil/mem.c @@ -68,8 +68,10 @@ void *av_malloc(size_t size) long diff; #endif + assert(size); + /* let's disallow possible ambiguous cases */ - if(size > (INT_MAX-32) ) + if (size > (INT_MAX-32) || !size) return NULL; #if CONFIG_MEMALIGN_HACK |