diff options
Diffstat (limited to 'c/fuzz/run_decode_fuzzer.cc')
-rw-r--r-- | c/fuzz/run_decode_fuzzer.cc | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/c/fuzz/run_decode_fuzzer.cc b/c/fuzz/run_decode_fuzzer.cc new file mode 100644 index 0000000..8fd4189 --- /dev/null +++ b/c/fuzz/run_decode_fuzzer.cc @@ -0,0 +1,44 @@ +/* Copyright 2016 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Simple runner for decode_fuzzer.cc */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <stdint.h> + +extern "C" void LLVMFuzzerTestOneInput(const uint8_t* data, size_t size); + +int main(int argc, char* *argv) { + if (argc != 2) { + fprintf(stderr, "Exactly one argument is expected.\n"); + exit(EXIT_FAILURE); + } + + FILE* f = fopen(argv[1], "r"); + if (!f) { + fprintf(stderr, "Failed to open input file."); + exit(EXIT_FAILURE); + } + + size_t max_len = 1 << 20; + unsigned char* tmp = (unsigned char*)malloc(max_len); + size_t len = fread(tmp, 1, max_len, f); + if (ferror(f)) { + fclose(f); + fprintf(stderr, "Failed read input file."); + exit(EXIT_FAILURE); + } + /* Make data after the end "inaccessible". */ + unsigned char* data = (unsigned char*)malloc(len); + memcpy(data, tmp, len); + free(tmp); + + LLVMFuzzerTestOneInput(data, len); + free(data); + exit(EXIT_SUCCESS); +} |