mirror of
https://git.savannah.gnu.org/git/gnulib.git
synced 2025-08-08 17:22:05 +03:00
malloc-gnu-tests, etc.: test ptrdiff_t overflow
* modules/calloc-gnu-tests (Depends-on): * modules/malloc-gnu-tests (Depends-on): * modules/realloc-gnu-tests (Depends-on): Add stdint. * tests/test-calloc-gnu.c (main): * tests/test-malloc-gnu.c (main):, * tests/test-realloc-gnu.c (main): Test for ptrdiff_t overflow.
This commit is contained in:
@@ -1,5 +1,13 @@
|
||||
2021-04-18 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
malloc-gnu-tests, etc.: test ptrdiff_t overflow
|
||||
* modules/calloc-gnu-tests (Depends-on):
|
||||
* modules/malloc-gnu-tests (Depends-on):
|
||||
* modules/realloc-gnu-tests (Depends-on): Add stdint.
|
||||
* tests/test-calloc-gnu.c (main):
|
||||
* tests/test-malloc-gnu.c (main):,
|
||||
* tests/test-realloc-gnu.c (main): Test for ptrdiff_t overflow.
|
||||
|
||||
malloc-gnu, etc.: prefer AS_CASE to woolly AS_IF
|
||||
* m4/calloc.m4 (_AC_FUNC_CALLOC_IF):
|
||||
* m4/malloc.m4 (_AC_FUNC_MALLOC_IF):
|
||||
|
@@ -2,6 +2,7 @@ Files:
|
||||
tests/test-calloc-gnu.c
|
||||
|
||||
Depends-on:
|
||||
stdint
|
||||
|
||||
configure.ac:
|
||||
|
||||
|
@@ -2,6 +2,7 @@ Files:
|
||||
tests/test-malloc-gnu.c
|
||||
|
||||
Depends-on:
|
||||
stdint
|
||||
|
||||
configure.ac:
|
||||
|
||||
|
@@ -2,6 +2,7 @@ Files:
|
||||
tests/test-realloc-gnu.c
|
||||
|
||||
Depends-on:
|
||||
stdint
|
||||
|
||||
configure.ac:
|
||||
|
||||
|
@@ -17,6 +17,7 @@
|
||||
#include <config.h>
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
|
||||
/* Return 8.
|
||||
Usual compilers are not able to infer something about the return value. */
|
||||
@@ -49,7 +50,18 @@ main ()
|
||||
'volatile' is needed to defeat an incorrect optimization by clang 10,
|
||||
see <https://bugs.llvm.org/show_bug.cgi?id=46055>. */
|
||||
{
|
||||
void * volatile p = calloc ((size_t) -1 / 8 + 1, eight ());
|
||||
void * volatile p = calloc (SIZE_MAX / 8 + 1, eight ());
|
||||
if (p != NULL)
|
||||
{
|
||||
free (p);
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
/* Likewise for PTRDIFF_MAX. */
|
||||
if (PTRDIFF_MAX / 8 < SIZE_MAX)
|
||||
{
|
||||
void * volatile p = calloc (PTRDIFF_MAX / 8 + 1, eight ());
|
||||
if (p != NULL)
|
||||
{
|
||||
free (p);
|
||||
|
@@ -17,6 +17,7 @@
|
||||
#include <config.h>
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
|
||||
int
|
||||
main ()
|
||||
@@ -25,7 +26,15 @@ main ()
|
||||
char *p = malloc (0);
|
||||
if (p == NULL)
|
||||
return 1;
|
||||
|
||||
free (p);
|
||||
|
||||
/* Check that malloc (n) fails when n exceeds PTRDIFF_MAX. */
|
||||
if (PTRDIFF_MAX < SIZE_MAX)
|
||||
{
|
||||
size_t n = PTRDIFF_MAX, n1 = n + 1;
|
||||
if (malloc (n1) != NULL)
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@@ -17,6 +17,7 @@
|
||||
#include <config.h>
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
|
||||
int
|
||||
main ()
|
||||
@@ -26,6 +27,15 @@ main ()
|
||||
if (p == NULL)
|
||||
return 1;
|
||||
|
||||
/* Check that realloc (p, n) fails when p is non-null and n exceeds
|
||||
PTRDIFF_MAX. */
|
||||
if (PTRDIFF_MAX < SIZE_MAX)
|
||||
{
|
||||
size_t n = PTRDIFF_MAX, n1 = n + 1;
|
||||
if (realloc (p, n1) != NULL)
|
||||
return 1;
|
||||
}
|
||||
|
||||
free (p);
|
||||
return 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user