Move malloc_wrappers.c to tests/common
This commit is contained in:
54
tests/common/malloc_wrappers.c
Normal file
54
tests/common/malloc_wrappers.c
Normal file
@@ -0,0 +1,54 @@
|
||||
#include "malloc_wrappers.h"
|
||||
#include <stdint.h>
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
|
||||
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;
|
||||
}
|
||||
Reference in New Issue
Block a user