Return NULL from `sub_alloc` for zero size

When zero was passed for the size to `sub_alloc`, we were passing this
size on to `malloc` or `calloc`, which is unusual enough that static
analyzers warn about this (POSIX says that either NULL or a pointer
will be returned).

We'll instead just return NULL right away.
This commit is contained in:
Travis Cross 2014-08-22 02:47:04 +00:00
parent 959e672a94
commit 3c32dd3bc9
1 changed files with 3 additions and 1 deletions

View File

@ -432,6 +432,8 @@ void *sub_alloc(su_home_t *home,
if (size >= ((size_t)1) << SIZEBITS)
return (void)(errno = ENOMEM), NULL;
if (!size) return NULL;
if (sub == NULL || 3 * sub->sub_used > 2 * sub->sub_n) {
/* Resize the hash table */
size_t i, n, n2;
@ -474,7 +476,7 @@ void *sub_alloc(su_home_t *home,
sub = b2;
}
if (size && sub && zero < do_clone &&
if (sub && zero < do_clone &&
sub->sub_preload && size <= sub->sub_prsize) {
/* Use preloaded memory */
size_t prused = sub->sub_prused + size + MEMCHECK_EXTRA;