From 5598f1d5da1940ca2f8597b464f331d4cea2cdc0 Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Wed, 13 May 2026 21:37:08 +0200 Subject: Tests and fixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- libtest/alloc.c | 85 +++++++++++++++++++++++++++++++++++++++----------------- libtest/random.c | 5 +++- 2 files changed, 64 insertions(+), 26 deletions(-) (limited to 'libtest') diff --git a/libtest/alloc.c b/libtest/alloc.c index f89ba94..e154624 100644 --- a/libtest/alloc.c +++ b/libtest/alloc.c @@ -717,8 +717,6 @@ check(int use_free) free(p); else free_aligned_sized(p, sizeof(void *), 11u); - - /* TODO mmap, munmap, mremap */ } @@ -728,6 +726,7 @@ check_successfuls(void) size_t pagesize; char *s; wchar_t *w; + void *q; check(1); check(0); @@ -817,7 +816,12 @@ check_successfuls(void) EXPECT(!memcmp(w, (wchar_t[]){11, 22, 0}, 3u * sizeof(wchar_t))); free(w); - /* TODO mmap, munmap, mremap */ + p = mmap(NULL, 1u, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + assert(p != MAP_FAILED); + p = mremap(p, 1u, 2u, 0); + assert(p != MAP_FAILED); + assert(malloc_usable_size(p) >= 6u); + asser(!munmap(p, 2u)); } @@ -826,55 +830,64 @@ check_failures(void) { void *q; - libtest_set_alloc_failure_in(1u); + libtest_set_alloc_failure_in(2u); + p = malloc(1u); + EXPECT(p); + free(p); + assert(libtest_get_alloc_failure_in() == 1u); errno = 0; - EXPECT(!malloc(1u)); + p = malloc(1u); + EXPECT(!p); EXPECT(errno == ENOMEM); EXPECT(!libtest_get_alloc_failure_in()); libtest_set_alloc_failure_in(1u); errno = 0; - EXPECT(!calloc(1u, 1u)); + p = calloc(1u, 1u); + EXPECT(!p); EXPECT(errno == ENOMEM); EXPECT(!libtest_get_alloc_failure_in()); libtest_set_alloc_failure_in(1u); errno = 0; - EXPECT(!realloc(NULL, 1u)); + p = realloc(NULL, 1u); + EXPECT(!p); EXPECT(errno == ENOMEM); EXPECT(!libtest_get_alloc_failure_in()); - q = realloc(NULL, 1u); - assert(q); + p = realloc(NULL, 1u); + assert(p); libtest_set_alloc_failure_in(1u); errno = 0; - EXPECT(!realloc(q, 1u)); + EXPECT(!realloc(p, 1u)); EXPECT(errno == ENOMEM); EXPECT(!libtest_get_alloc_failure_in()); - free(q); + free(p); libtest_set_alloc_failure_in(1u); errno = 0; EXPECT(!reallocarray(NULL, 1u, 1u)); EXPECT(errno == ENOMEM); EXPECT(!libtest_get_alloc_failure_in()); - q = reallocarray(NULL, 1u, 1u); - assert(q); + p = reallocarray(NULL, 1u, 1u); + assert(p); libtest_set_alloc_failure_in(1u); errno = 0; - EXPECT(!reallocarray(q, 1u, 1u)); + EXPECT(!reallocarray(p, 1u, 1u)); EXPECT(errno == ENOMEM); EXPECT(!libtest_get_alloc_failure_in()); - free(q); + free(p); libtest_set_alloc_failure_in(1u); errno = 0; - EXPECT(!memalign(1u, 1u)); + p = memalign(1u, 1u); + EXPECT(!p); EXPECT(errno == ENOMEM); EXPECT(!libtest_get_alloc_failure_in()); libtest_set_alloc_failure_in(1u); errno = 0; - EXPECT(!aligned_alloc(1u, 1u)); + p = aligned_alloc(1u, 1u); + EXPECT(!p); EXPECT(errno == ENOMEM); EXPECT(!libtest_get_alloc_failure_in()); @@ -885,47 +898,69 @@ check_failures(void) libtest_set_alloc_failure_in(1u); errno = 0; - EXPECT(!valloc(1u)); + p = valloc(1u); + EXPECT(!p); EXPECT(errno == ENOMEM); EXPECT(!libtest_get_alloc_failure_in()); libtest_set_alloc_failure_in(1u); errno = 0; - EXPECT(!pvalloc(1u)); + p = pvalloc(1u); + EXPECT(!p); EXPECT(errno == ENOMEM); EXPECT(!libtest_get_alloc_failure_in()); libtest_set_alloc_failure_in(1u); errno = 0; - EXPECT(!strdup("x")); + p = strdup("x"); + EXPECT(!p); EXPECT(errno == ENOMEM); EXPECT(!libtest_get_alloc_failure_in()); libtest_set_alloc_failure_in(1u); errno = 0; - EXPECT(!strndup("x", 1u)); + p = strndup("x", 1u); + EXPECT(!p); EXPECT(errno == ENOMEM); EXPECT(!libtest_get_alloc_failure_in()); libtest_set_alloc_failure_in(1u); errno = 0; - EXPECT(!wcsdup((wchar_t[]){1, 0})); + p = wcsdup((wchar_t[]){1, 0}); + EXPECT(!p); EXPECT(errno == ENOMEM); EXPECT(!libtest_get_alloc_failure_in()); libtest_set_alloc_failure_in(1u); errno = 0; - EXPECT(!wcsndup((wchar_t[]){1, 0}, 1u)); + p = wcsndup((wchar_t[]){1, 0}, 1u); + EXPECT(!p); EXPECT(errno == ENOMEM); EXPECT(!libtest_get_alloc_failure_in()); libtest_set_alloc_failure_in(1u); errno = 0; - EXPECT(!memdup("x", 1u)); + p = memdup("x", 1u); + EXPECT(!p); EXPECT(errno == ENOMEM); EXPECT(!libtest_get_alloc_failure_in()); - /* TODO mmap, munmap, mremap */ + libtest_set_alloc_failure_in(1u); + errno = 0; + p = mmap(NULL, 1u, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + EXPECT(p == MAP_FAILED); + EXPECT(errno == ENOMEM); + EXPECT(!libtest_get_alloc_failure_in()); + + p = mmap(NULL, 1u, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + assert(p != MAP_FAILED); + q = p; + libtest_set_alloc_failure_in(1u); + errno = 0; + p = mremap(p, 1u, 2u, 0); + EXPECT(errno == ENOMEM); + EXPECT(!libtest_get_alloc_failure_in()); + munmap(q, 1u); } diff --git a/libtest/random.c b/libtest/random.c index 77e9218..2eb22e6 100644 --- a/libtest/random.c +++ b/libtest/random.c @@ -12,10 +12,13 @@ genpattern(void *buf, size_t size) { unsigned char *out = buf; size_t n; + ssize_t ret; if (size > (size_t)SSIZE_MAX) size = (size_t)SSIZE_MAX; + ret = (ssize_t)size; + if (libtest_random_pattern_length) { while (size) { if (libtest_random_pattern_offset == libtest_random_pattern_length) @@ -33,7 +36,7 @@ genpattern(void *buf, size_t size) out[0] = (unsigned char)rand(); } - return (ssize_t)size; + return ret; } -- cgit v1.2.3-70-g09d2