Handle 0-size allocation requests in posix_memalign().
This commit is contained in:
parent
84cbbcb90a
commit
f251814779
@ -5876,7 +5876,7 @@ malloc(size_t size)
|
|||||||
|
|
||||||
if (malloc_init()) {
|
if (malloc_init()) {
|
||||||
ret = NULL;
|
ret = NULL;
|
||||||
goto RETURN;
|
goto OOM;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (size == 0) {
|
if (size == 0) {
|
||||||
@ -5886,6 +5886,14 @@ malloc(size_t size)
|
|||||||
size = 1;
|
size = 1;
|
||||||
#ifdef JEMALLOC_SYSV
|
#ifdef JEMALLOC_SYSV
|
||||||
else {
|
else {
|
||||||
|
# ifdef JEMALLOC_XMALLOC
|
||||||
|
if (opt_xmalloc) {
|
||||||
|
malloc_message("<jemalloc>",
|
||||||
|
": Error in malloc(): invalid size 0\n", "",
|
||||||
|
"");
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
# endif
|
||||||
ret = NULL;
|
ret = NULL;
|
||||||
goto RETURN;
|
goto RETURN;
|
||||||
}
|
}
|
||||||
@ -5894,7 +5902,7 @@ malloc(size_t size)
|
|||||||
|
|
||||||
ret = imalloc(size);
|
ret = imalloc(size);
|
||||||
|
|
||||||
RETURN:
|
OOM:
|
||||||
if (ret == NULL) {
|
if (ret == NULL) {
|
||||||
#ifdef JEMALLOC_XMALLOC
|
#ifdef JEMALLOC_XMALLOC
|
||||||
if (opt_xmalloc) {
|
if (opt_xmalloc) {
|
||||||
@ -5907,6 +5915,9 @@ RETURN:
|
|||||||
errno = ENOMEM;
|
errno = ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef JEMALLOC_SYSV
|
||||||
|
RETURN:
|
||||||
|
#endif
|
||||||
#ifdef JEMALLOC_TRACE
|
#ifdef JEMALLOC_TRACE
|
||||||
if (opt_trace)
|
if (opt_trace)
|
||||||
trace_malloc(ret, size);
|
trace_malloc(ret, size);
|
||||||
@ -5923,6 +5934,29 @@ posix_memalign(void **memptr, size_t alignment, size_t size)
|
|||||||
if (malloc_init())
|
if (malloc_init())
|
||||||
result = NULL;
|
result = NULL;
|
||||||
else {
|
else {
|
||||||
|
if (size == 0) {
|
||||||
|
#ifdef JEMALLOC_SYSV
|
||||||
|
if (opt_sysv == false)
|
||||||
|
#endif
|
||||||
|
size = 1;
|
||||||
|
#ifdef JEMALLOC_SYSV
|
||||||
|
else {
|
||||||
|
# ifdef JEMALLOC_XMALLOC
|
||||||
|
if (opt_xmalloc) {
|
||||||
|
malloc_message("<jemalloc>",
|
||||||
|
": Error in posix_memalign(): "
|
||||||
|
"invalid size 0\n", "", "");
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
# endif
|
||||||
|
result = NULL;
|
||||||
|
*memptr = NULL;
|
||||||
|
ret = 0;
|
||||||
|
goto RETURN;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/* Make sure that alignment is a large enough power of 2. */
|
/* Make sure that alignment is a large enough power of 2. */
|
||||||
if (((alignment - 1) & alignment) != 0
|
if (((alignment - 1) & alignment) != 0
|
||||||
|| alignment < sizeof(void *)) {
|
|| alignment < sizeof(void *)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user