diff options
Diffstat (limited to 'tm.c')
-rw-r--r-- | tm.c | 54 |
1 files changed, 54 insertions, 0 deletions
@@ -0,0 +1,54 @@ +#include <stdio.h> +#include <stdlib.h> +#include <stdarg.h> + +static void printf_log(const char *fmt, ...) +{ + va_list lst; + va_start(lst, fmt); + vprintf(fmt, lst); + va_end(lst); +} + +/* Override this for non-printf reporting */ +extern void (*malloc_log)(const char *fmt, ...); +static void ctor(void) __attribute__((constructor)); +static void ctor(void) +{ + malloc_log = printf_log; +} + +int main(void) +{ + char *ptr[6]; + char *uaf; + char *cf, *cb; + + ptr[0] = malloc(10); + ptr[1] = calloc(1,20); + ptr[2] = malloc(30); + ptr[3] = malloc(40); + ptr[4] = malloc(50); + ptr[5] = malloc(60); + + free(ptr[1]); + free(ptr[1]); + free(ptr[2]); + ptr[2] = realloc(ptr[2], 300); +// free(ptr[2]); +// free(ptr[2]); + + uaf = ptr[3]; + free(uaf); + uaf[5] = 'a'; + + cf = ptr[4]; + cf[-1] = 'a'; + + cb = ptr[5]; + cb[60] = 'a'; + + sleep(10); + + return 0; +} |