From f47aabd094a4eafeed5a510c650d7a063a148076 Mon Sep 17 00:00:00 2001 From: Mark Haines Date: Mon, 23 May 2016 17:32:24 +0100 Subject: Add support for building fuzzers using american fuzzy lop Builds fuzzers using http://lcamtuf.coredump.cx/afl/ --- fuzzers/include/fuzzing.hh | 72 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 fuzzers/include/fuzzing.hh (limited to 'fuzzers/include/fuzzing.hh') diff --git a/fuzzers/include/fuzzing.hh b/fuzzers/include/fuzzing.hh new file mode 100644 index 0000000..e4f5eb9 --- /dev/null +++ b/fuzzers/include/fuzzing.hh @@ -0,0 +1,72 @@ +#include "olm/olm.hh" + +#include +#include +#include +#include +#include +#include +#include +#include + + +ssize_t read_file( + int fd, + uint8_t **buffer +) { + size_t buffer_size = 4096; + uint8_t * current_buffer = (uint8_t *) malloc(buffer_size); + if (current_buffer == NULL) return -1; + size_t buffer_pos = 0; + while (1) { + ssize_t count = read( + fd, current_buffer + buffer_pos, buffer_size - buffer_pos + ); + if (count < 0) break; + if (count == 0) { + uint8_t * return_buffer = (uint8_t *) realloc(current_buffer, buffer_pos); + if (return_buffer == NULL) break; + *buffer = return_buffer; + return buffer_pos; + } + buffer_pos += count; + if (buffer_pos == buffer_size) { + buffer_size *= 2; + uint8_t * new_buffer = (uint8_t *) realloc(current_buffer, buffer_size); + if (new_buffer == NULL) break; + current_buffer = new_buffer; + } + } + free(current_buffer); + return -1; +} + +template +T check_errno( + const char * message, + T value +) { + if (value == T(-1)) { + perror(message); + exit(1); + } + return value; +} + +size_t check_session( + OlmSession * session, + const char * message, + size_t value +) { + if (value == olm_error()) { + const char * olm_message = olm_session_last_error(session); + ssize_t ignored; + ignored = write(STDERR_FILENO, message, strlen(message)); + ignored = write(STDERR_FILENO, ": ", 2); + ignored = write(STDERR_FILENO, olm_message, strlen(olm_message)); + ignored = write(STDERR_FILENO, "\n", 1); + exit(2); + return ignored; + } + return value; +} -- cgit v1.2.3