]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
array: Don't use realloc() with zero size in array_compress()
authorThomas Egerer <thomas.egerer@secunet.com>
Fri, 6 Sep 2024 11:29:40 +0000 (13:29 +0200)
committerTobias Brunner <tobias@strongswan.org>
Thu, 12 Sep 2024 06:53:26 +0000 (08:53 +0200)
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>
src/libstrongswan/collections/array.c

index 8acc8051d539418f0fd943946f8438eb4eff41a3..8b6c6d7397e22916e04946ae28de908d316273a5 100644 (file)
@@ -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;
                }
        }