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:
10
ChangeLog
10
ChangeLog
@@ -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.
|
||||
|
@@ -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;
|
||||
|
@@ -26,7 +26,7 @@ Include:
|
||||
<stdlib.h>
|
||||
|
||||
License:
|
||||
LGPL
|
||||
LGPLv2+
|
||||
|
||||
Maintainer:
|
||||
all
|
||||
|
@@ -7,7 +7,7 @@ lib/safe-alloc.c
|
||||
m4/safe-alloc.m4
|
||||
|
||||
Depends-on:
|
||||
xalloc-oversized
|
||||
reallocarray
|
||||
|
||||
configure.ac:
|
||||
gl_SAFE_ALLOC
|
||||
|
Reference in New Issue
Block a user