diff --git a/fuzzing/helpers.h b/fuzzing/helpers.h new file mode 100644 index 0000000..3a67f7b --- /dev/null +++ b/fuzzing/helpers.h @@ -0,0 +1,43 @@ +#ifndef HELPERS_H +#define HELPERS_H + +/* Common helpers for fuzzing */ + +#include +#include +#include + +/* We use this to pad the fuzz */ +static inline const uint8_t *makePadded(const uint8_t *data, size_t size) { + static char *padded = new char[1024 * 500]; + + memcpy(padded, data, size); + + return (uint8_t *) padded; +} + +/* Splits the fuzz data in one or many chunks */ +static inline void makeChunked(const uint8_t *data, size_t size, std::function cb) { + /* First byte determines chunk size; 0 is all that remains, 1-255 is small chunk */ + for (int i = 0; i < size; ) { + unsigned int chunkSize = data[++i]; + if (!chunkSize) { + chunkSize = size - i; + } else { + chunkSize = std::min(chunkSize, size - i); + } + + cb(data + i, chunkSize); + i += chunkSize; + } +} + +/* Reads all bytes to trigger invalid reads */ +static inline void readBytes(std::string_view s) { + volatile int sum = 0; + for (int i = 0; i < s.size(); i++) { + sum += s[i]; + } +} + +#endif