mirror of
https://github.com/strongswan/strongswan.git
synced 2025-10-03 00:00:24 -04:00
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 <thomas.egerer@secunet.com>
This commit is contained in:
parent
957aae8f64
commit
cf7fb47788
@ -197,7 +197,17 @@ void array_compress(array_t *array)
|
||||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user