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>
|
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
|
xalloc-oversized: fix SIZE_MAX optimization bug
|
||||||
* lib/xalloc-oversized.h (xalloc_count_t): Remove; no longer
|
* lib/xalloc-oversized.h (xalloc_count_t): Remove; no longer
|
||||||
needed and was evidently error-prone anyway.
|
needed and was evidently error-prone anyway.
|
||||||
|
@@ -22,8 +22,6 @@
|
|||||||
/* Specification. */
|
/* Specification. */
|
||||||
#include "safe-alloc.h"
|
#include "safe-alloc.h"
|
||||||
|
|
||||||
#include "xalloc-oversized.h"
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
@@ -51,16 +49,10 @@ safe_alloc_alloc_n (void *ptrptr, size_t size, size_t count, int zeroed)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (xalloc_oversized (count, size))
|
|
||||||
{
|
|
||||||
errno = ENOMEM;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (zeroed)
|
if (zeroed)
|
||||||
*(void **) ptrptr = calloc (count, size);
|
*(void **) ptrptr = calloc (count, size);
|
||||||
else
|
else
|
||||||
*(void **) ptrptr = malloc (count * size);
|
*(void **) ptrptr = reallocarray (NULL, count, size);
|
||||||
|
|
||||||
if (*(void **) ptrptr == NULL)
|
if (*(void **) ptrptr == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
@@ -91,12 +83,7 @@ safe_alloc_realloc_n (void *ptrptr, size_t size, size_t count)
|
|||||||
*(void **) ptrptr = NULL;
|
*(void **) ptrptr = NULL;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (xalloc_oversized (count, size))
|
tmp = reallocarray (*(void **) ptrptr, size, count);
|
||||||
{
|
|
||||||
errno = ENOMEM;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
tmp = realloc (*(void **) ptrptr, size * count);
|
|
||||||
if (!tmp)
|
if (!tmp)
|
||||||
return -1;
|
return -1;
|
||||||
*(void **) ptrptr = tmp;
|
*(void **) ptrptr = tmp;
|
||||||
|
@@ -26,7 +26,7 @@ Include:
|
|||||||
<stdlib.h>
|
<stdlib.h>
|
||||||
|
|
||||||
License:
|
License:
|
||||||
LGPL
|
LGPLv2+
|
||||||
|
|
||||||
Maintainer:
|
Maintainer:
|
||||||
all
|
all
|
||||||
|
@@ -7,7 +7,7 @@ lib/safe-alloc.c
|
|||||||
m4/safe-alloc.m4
|
m4/safe-alloc.m4
|
||||||
|
|
||||||
Depends-on:
|
Depends-on:
|
||||||
xalloc-oversized
|
reallocarray
|
||||||
|
|
||||||
configure.ac:
|
configure.ac:
|
||||||
gl_SAFE_ALLOC
|
gl_SAFE_ALLOC
|
||||||
|
Reference in New Issue
Block a user