#include "malloc_wrappers.h" #include #include #include static size_t alloc_count = 0; /* Allocate memory and place check values before and after. */ void* malloc_with_check(size_t size) { size_t size32 = (size + 3) / 4 + 3; uint32_t *buf = malloc(size32 * sizeof(uint32_t)); buf[0] = size32; buf[1] = 0xDEADBEEF; buf[size32 - 1] = 0xBADBAD; return buf + 2; } /* Free memory allocated with malloc_with_check() and do the checks. */ void free_with_check(void *mem) { uint32_t *buf = (uint32_t*)mem - 2; assert(buf[1] == 0xDEADBEEF); assert(buf[buf[0] - 1] == 0xBADBAD); free(buf); } /* Track memory usage */ void* counting_realloc(void *ptr, size_t size) { /* Don't allocate crazy amounts of RAM when fuzzing */ if (size > 1000000) return NULL; if (!ptr && size) alloc_count++; return realloc(ptr, size); } void counting_free(void *ptr) { if (ptr) { assert(alloc_count > 0); alloc_count--; free(ptr); } } size_t get_alloc_count() { return alloc_count; }