diff options
Diffstat (limited to 'test/scudo/malloc.cpp')
-rw-r--r-- | test/scudo/malloc.cpp | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/test/scudo/malloc.cpp b/test/scudo/malloc.cpp index 4507a5225ceb..cafc744a20c2 100644 --- a/test/scudo/malloc.cpp +++ b/test/scudo/malloc.cpp @@ -2,26 +2,37 @@ // RUN: %run %t 2>&1 // Tests that a regular workflow of allocation, memory fill and free works as -// intended. Also tests that a zero-sized allocation succeeds. +// intended. Tests various sizes serviced by the primary and secondary +// allocators. -#include <malloc.h> #include <stdlib.h> #include <string.h> +#include <vector> + int main(int argc, char **argv) { void *p; - size_t size = 1U << 8; + std::vector<ssize_t> sizes{1, 8, 16, 32, 1024, 32768, + 1 << 16, 1 << 17, 1 << 20, 1 << 24}; + std::vector<int> offsets{1, 0, -1, -7, -8, -15, -16, -31, -32}; - p = malloc(size); - if (!p) - return 1; - memset(p, 'A', size); - free(p); p = malloc(0); if (!p) return 1; free(p); + for (ssize_t size : sizes) { + for (int offset: offsets) { + ssize_t actual_size = size + offset; + if (actual_size <= 0) + continue; + p = malloc(actual_size); + if (!p) + return 1; + memset(p, 0xff, actual_size); + free(p); + } + } return 0; } |