aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Storsjö <martin@martin.st>2012-04-08 17:38:45 +0300
committerMartin Storsjö <martin@martin.st>2012-04-10 11:56:42 +0300
commit14f063d294a18a31928d2167a66b1087910e14c8 (patch)
tree5682c191f420cefb276728be328e2f1a28cb60f9
parente36b25d1df2ab30540c2d8939c5f2b0d6c059317 (diff)
downloadffmpeg-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.c4
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