1 2 #include "main_entry.h" 3 #include <stdlib.h> 4 #include <string.h> 5 #include <unistd.h> 6 7 8 #ifdef LIBFUZZER LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)9 int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { 10 (void) fuzz_one_input(data, size); 11 return 0; 12 } 13 #else 14 15 #ifndef AFL_MAX_SIZE 16 #define AFL_MAX_SIZE 8192 17 #endif 18 19 static uint8_t tmp_buffer[AFL_MAX_SIZE]; 20 afl_read(uint8_t ** data)21static size_t afl_read(uint8_t **data) { 22 23 ssize_t size = read(0, tmp_buffer, AFL_MAX_SIZE); 24 if (size <= 0) { 25 return 0; 26 } 27 *data = (uint8_t *) malloc(size); 28 if (NULL == *data) { 29 return 0; 30 } 31 memcpy(*data, tmp_buffer, size); 32 return size; 33 } 34 35 #define AFL_READ_AND_EXECUTE \ 36 do { \ 37 size = afl_read(&data); \ 38 if (NULL == data || 0 == size) { \ 39 return 0; \ 40 } \ 41 ret = fuzz_one_input(data, size); \ 42 free(data); \ 43 } while (0) 44 main(void)45int main(void) { 46 size_t size; 47 uint8_t *data = NULL; 48 bool ret; 49 50 #ifdef __AFL_LOOP 51 while (__AFL_LOOP(1000)) { 52 AFL_READ_AND_EXECUTE; 53 } 54 return 0; 55 #else 56 AFL_READ_AND_EXECUTE; 57 return ret ? 0 : -1; 58 #endif 59 } 60 #endif 61