]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
talloc_array_length() doesn't handle array resized by talloc_realloc_fn() (#4428)
authorNick Porter <nick@portercomputing.co.uk>
Fri, 25 Mar 2022 13:45:06 +0000 (13:45 +0000)
committerGitHub <noreply@github.com>
Fri, 25 Mar 2022 13:45:06 +0000 (07:45 -0600)
src/lib/util/talloc.c

index 947a97d1f804a02b0d3fd3ee24fe7a2800079266..cc4d9335af62685f17d4368fecaf88ac96a71f08 100644 (file)
@@ -717,13 +717,15 @@ void **talloc_array_null_terminate(void **array)
        size_t          len;
        TALLOC_CTX      *ctx;
        void            **new;
+       size_t          size;
 
        if (!array) return NULL;
 
        len = talloc_array_length(array);
        ctx = talloc_parent(array);
+       size = talloc_get_size(array) / talloc_array_length(array);
 
-       new = talloc_realloc_fn(ctx, array, len + 1);
+       new = _talloc_realloc_array(ctx, array, size, len + 1, talloc_get_name(array));
        if (!new) return NULL;
 
        new[len] = NULL;
@@ -745,17 +747,19 @@ void **talloc_array_null_strip(void **array)
        size_t          len;
        TALLOC_CTX      *ctx;
        void            **new;
+       size_t          size;
 
        if (!array) return NULL;
 
        len = talloc_array_length(array);
        ctx = talloc_parent(array);
+       size = talloc_get_size(array) / talloc_array_length(array);
 
        if ((len - 1) == 0) return NULL;
 
        if (array[len - 1] != NULL) return NULL;
 
-       new = talloc_realloc_fn(ctx, array, len - 1);
+       new = _talloc_realloc_array(ctx, array, size, len - 1, talloc_get_name(array));
        if (!new) return NULL;
 
        return new;