]> wimlib.net Git - wimlib/blob - tools/libFuzzer/fault-injection.c
mount_image.c: add fallback definitions of RENAME_* constants
[wimlib] / tools / libFuzzer / fault-injection.c
1 #include "fuzzer.h"
2
3 static int64_t num_allocs_remaining;
4
5 static void *
6 faultinject_malloc(size_t size)
7 {
8         if (__atomic_sub_fetch(&num_allocs_remaining, 1, __ATOMIC_RELAXED) <= 0)
9                 return NULL;
10         return malloc(size);
11 }
12
13 static void
14 faultinject_free(void *p)
15 {
16         free(p);
17 }
18
19 static void *
20 faultinject_realloc(void *p, size_t size)
21 {
22         if (__atomic_sub_fetch(&num_allocs_remaining, 1, __ATOMIC_RELAXED) <= 0)
23                 return NULL;
24         return realloc(p, size);
25 }
26
27 bool
28 setup_fault_nth(const uint8_t **in, size_t *insize, uint16_t *fault_nth)
29 {
30         uint16_t n;
31
32         if (*insize < 2)
33                 return false;
34         memcpy(&n, *in, 2);
35         wimlib_set_memory_allocator(faultinject_malloc, faultinject_free,
36                                     faultinject_realloc);
37         num_allocs_remaining = n ?: INT64_MAX;
38         *in += 2;
39         *insize -= 2;
40         *fault_nth = n;
41         return true;
42 }