array: Don't use realloc() with zero size in array_compress()
The behavior of realloc(3) with zero size was apparently implementation defined. While glibc documents the behavior as equivalent to free(3), that might not apply to other C libraries. With C17, this behavior has been deprecated, and with C23, the behavior is now undefined. It's also why valgrind warns about this use. Hence, when array_compress() would call realloc() with a zero size, we now call free() explicitly and set the pointer to NULL. Signed-off-by: Thomas Egerer <[email protected]>
This commit is contained in:
committed by
Tobias Brunner
parent
957aae8f64
commit
cf7fb47788
@@ -197,7 +197,17 @@ void array_compress(array_t *array)
|
|||||||
}
|
}
|
||||||
if (tail)
|
if (tail)
|
||||||
{
|
{
|
||||||
array->data = realloc(array->data, get_size(array, array->count));
|
size_t size = get_size(array, array->count);
|
||||||
|
|
||||||
|
if (size)
|
||||||
|
{
|
||||||
|
array->data = realloc(array->data, size);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
free(array->data);
|
||||||
|
array->data = NULL;
|
||||||
|
}
|
||||||
array->tail = 0;
|
array->tail = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user