blob: ad69f1cef6e41645a4287d7ffb542486500ac3ce (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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;
}
|