mirror of https://github.com/grpc/grpc.git
The C based gRPC (C++, Python, Ruby, Objective-C, PHP, C#)
https://grpc.io/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.1 KiB
54 lines
1.1 KiB
#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; |
|
}
|
|
|