summaryrefslogtreecommitdiffstats
path: root/testsuites
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2021-05-05 08:49:52 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2021-05-06 08:03:58 +0200
commit2c5199bb049efe8e29cd12461dc57bd6e30388e8 (patch)
tree31086387522ae9803a5a15bb33ee014ed96eeaf8 /testsuites
parentlibc: Reimplement posix_memlign() (diff)
downloadrtems-2c5199bb049efe8e29cd12461dc57bd6e30388e8.tar.bz2
Return NULL for zero size allocations
In POSIX, zero size memory allocations are implementation-defined behaviour. The implementation has two options: https://pubs.opengroup.org/onlinepubs/9699919799/functions/malloc.html https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_memalign.html Linux and FreeBSD return a unique pointer for zero size memory allocations. Return NULL on RTEMS to more likely catch the use of a zero size memory area by erroneous applications. Update #4390.
Diffstat (limited to 'testsuites')
-rw-r--r--testsuites/libtests/malloctest/init.c81
1 files changed, 26 insertions, 55 deletions
diff --git a/testsuites/libtests/malloctest/init.c b/testsuites/libtests/malloctest/init.c
index c9dcb63b2c..a33764177d 100644
--- a/testsuites/libtests/malloctest/init.c
+++ b/testsuites/libtests/malloctest/init.c
@@ -1153,10 +1153,7 @@ static void test_rtems_malloc(void)
void *p;
p = rtems_malloc(0);
- rtems_test_assert(p != NULL);
-
- RTEMS_OBFUSCATE_VARIABLE(p);
- free(p);
+ rtems_test_assert(p == NULL);
errno = 0;
p = rtems_malloc(SIZE_MAX / 2);
@@ -1176,22 +1173,13 @@ static void test_rtems_calloc(void)
int *i;
p = rtems_calloc(0, 0);
- rtems_test_assert(p != NULL);
-
- RTEMS_OBFUSCATE_VARIABLE(p);
- free(p);
+ rtems_test_assert(p == NULL);
p = rtems_calloc(0, 1);
- rtems_test_assert(p != NULL);
-
- RTEMS_OBFUSCATE_VARIABLE(p);
- free(p);
+ rtems_test_assert(p == NULL);
p = rtems_calloc(1, 0);
- rtems_test_assert(p != NULL);
-
- RTEMS_OBFUSCATE_VARIABLE(p);
- free(p);
+ rtems_test_assert(p == NULL);
errno = 0;
p = rtems_calloc(1, SIZE_MAX / 2);
@@ -1323,73 +1311,56 @@ static void test_alloc_zero_size(void)
int eno;
size = 0;
+ errno = -1;
RTEMS_OBFUSCATE_VARIABLE( size );
p = malloc( size );
- rtems_test_assert( p != NULL );
-
- RTEMS_OBFUSCATE_VARIABLE( p );
- free( p );
+ rtems_test_assert( p == NULL );
+ rtems_test_assert( errno == -1 );
RTEMS_OBFUSCATE_VARIABLE( size );
- p = calloc( 1, size );
- rtems_test_assert( p != NULL );
-
- RTEMS_OBFUSCATE_VARIABLE( p );
- free( p );
+ p = calloc( size, 1 );
+ rtems_test_assert( p == NULL );
+ rtems_test_assert( errno == -1 );
RTEMS_OBFUSCATE_VARIABLE( size );
p = rtems_malloc( size );
- rtems_test_assert( p != NULL );
-
- RTEMS_OBFUSCATE_VARIABLE( p );
- free( p );
+ rtems_test_assert( p == NULL );
+ rtems_test_assert( errno == -1 );
RTEMS_OBFUSCATE_VARIABLE( size );
p = rtems_calloc( 1, size );
- rtems_test_assert( p != NULL );
-
- RTEMS_OBFUSCATE_VARIABLE( p );
- free( p );
+ rtems_test_assert( p == NULL );
+ rtems_test_assert( errno == -1 );
RTEMS_OBFUSCATE_VARIABLE( size );
- p = NULL;
+ p = (void *)(uintptr_t) 1;
eno = posix_memalign( &p, 32, size );
rtems_test_assert( eno == 0 );
- rtems_test_assert( p != NULL );
-
- RTEMS_OBFUSCATE_VARIABLE( p );
- free( p );
+ rtems_test_assert( p == NULL );
+ rtems_test_assert( errno == -1 );
RTEMS_OBFUSCATE_VARIABLE( size );
- p = NULL;
+ p = (void *)(uintptr_t) 1;
eno = rtems_memalign( &p, 32, size );
rtems_test_assert( eno == 0 );
- rtems_test_assert( p != NULL );
-
- RTEMS_OBFUSCATE_VARIABLE( p );
- free( p );
+ rtems_test_assert( p == NULL );
+ rtems_test_assert( errno == -1 );
RTEMS_OBFUSCATE_VARIABLE( size );
p = aligned_alloc( 32, size );
- rtems_test_assert( p != NULL );
-
- RTEMS_OBFUSCATE_VARIABLE( p );
- free( p );
+ rtems_test_assert( p == NULL );
+ rtems_test_assert( errno == -1 );
RTEMS_OBFUSCATE_VARIABLE( size );
p = realloc( NULL, size );
- rtems_test_assert( p != NULL );
-
- RTEMS_OBFUSCATE_VARIABLE( p );
- free( p );
+ rtems_test_assert( p == NULL );
+ rtems_test_assert( errno == -1 );
RTEMS_OBFUSCATE_VARIABLE( size );
p = reallocarray( NULL, 1, size );
- rtems_test_assert( p != NULL );
-
- RTEMS_OBFUSCATE_VARIABLE( p );
- free( p );
+ rtems_test_assert( p == NULL );
+ rtems_test_assert( errno == -1 );
}
rtems_task Init(