1
0
mirror of https://git.savannah.gnu.org/git/gnulib.git synced 2025-08-08 17:22:05 +03:00

safe-alloc: simplify via reallocarray

* lib/safe-alloc.c: Do not include xalloc-oversized.h.
(safe_alloc_alloc_n, safe_alloc_realloc_n):
Use reallocarray to check for size or ptrdiff_t overflow.
* modules/reallocarray (License): Switch from LGPL to LGPLv2+, as
this is needed for safe-alloc and anyway is more appropriate for
this library function common with BSD.
* modules/safe-alloc (Depends-on): Depend on reallocarray
rather than xalloc-oversized.
This commit is contained in:
Paul Eggert
2021-04-18 16:53:11 -07:00
parent 6c9d1972b2
commit d4e52e5e3c
4 changed files with 14 additions and 17 deletions

View File

@@ -1,5 +1,15 @@
2021-04-18 Paul Eggert <eggert@cs.ucla.edu>
safe-alloc: simplify via reallocarray
* lib/safe-alloc.c: Do not include xalloc-oversized.h.
(safe_alloc_alloc_n, safe_alloc_realloc_n):
Use reallocarray to check for size or ptrdiff_t overflow.
* modules/reallocarray (License): Switch from LGPL to LGPLv2+, as
this is needed for safe-alloc and anyway is more appropriate for
this library function common with BSD.
* modules/safe-alloc (Depends-on): Depend on reallocarray
rather than xalloc-oversized.
xalloc-oversized: fix SIZE_MAX optimization bug
* lib/xalloc-oversized.h (xalloc_count_t): Remove; no longer
needed and was evidently error-prone anyway.

View File

@@ -22,8 +22,6 @@
/* Specification. */
#include "safe-alloc.h"
#include "xalloc-oversized.h"
#include <stdlib.h>
#include <stddef.h>
#include <errno.h>
@@ -51,16 +49,10 @@ safe_alloc_alloc_n (void *ptrptr, size_t size, size_t count, int zeroed)
return 0;
}
if (xalloc_oversized (count, size))
{
errno = ENOMEM;
return -1;
}
if (zeroed)
*(void **) ptrptr = calloc (count, size);
else
*(void **) ptrptr = malloc (count * size);
*(void **) ptrptr = reallocarray (NULL, count, size);
if (*(void **) ptrptr == NULL)
return -1;
@@ -91,12 +83,7 @@ safe_alloc_realloc_n (void *ptrptr, size_t size, size_t count)
*(void **) ptrptr = NULL;
return 0;
}
if (xalloc_oversized (count, size))
{
errno = ENOMEM;
return -1;
}
tmp = realloc (*(void **) ptrptr, size * count);
tmp = reallocarray (*(void **) ptrptr, size, count);
if (!tmp)
return -1;
*(void **) ptrptr = tmp;

View File

@@ -26,7 +26,7 @@ Include:
<stdlib.h>
License:
LGPL
LGPLv2+
Maintainer:
all

View File

@@ -7,7 +7,7 @@ lib/safe-alloc.c
m4/safe-alloc.m4
Depends-on:
xalloc-oversized
reallocarray
configure.ac:
gl_SAFE_ALLOC