diff options
author | Max Dymond <cmeister2@gmail.com> | 2019-06-25 16:22:02 (GMT) |
---|---|---|
committer | Max Dymond <cmeister2@gmail.com> | 2019-06-28 07:30:02 (GMT) |
commit | a5cf079d4dc9097c4e58f0eb7b0996b0a6d91696 (patch) | |
tree | 9c91b612a8bcbcfb0137518509d0fe3bcead50cc /ossfuzz/standaloneengine.cc | |
parent | 798301b4e144fab5d25fc34566c1419685f5f1eb (diff) | |
download | lz4-a5cf079d4dc9097c4e58f0eb7b0996b0a6d91696.zip lz4-a5cf079d4dc9097c4e58f0eb7b0996b0a6d91696.tar.gz lz4-a5cf079d4dc9097c4e58f0eb7b0996b0a6d91696.tar.bz2 |
Add a fuzzing target that compiles in the oss-fuzz environment
Diffstat (limited to 'ossfuzz/standaloneengine.cc')
-rw-r--r-- | ossfuzz/standaloneengine.cc | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/ossfuzz/standaloneengine.cc b/ossfuzz/standaloneengine.cc new file mode 100644 index 0000000..175360e --- /dev/null +++ b/ossfuzz/standaloneengine.cc @@ -0,0 +1,74 @@ +#include <stdint.h> +#include <stdio.h> +#include <stdlib.h> + +#include "testinput.h" + +/** + * Main procedure for standalone fuzzing engine. + * + * Reads filenames from the argument array. For each filename, read the file + * into memory and then call the fuzzing interface with the data. + */ +int main(int argc, char **argv) +{ + int ii; + for(ii = 1; ii < argc; ii++) + { + FILE *infile; + printf("[%s] ", argv[ii]); + + /* Try and open the file. */ + infile = fopen(argv[ii], "rb"); + if(infile) + { + uint8_t *buffer = NULL; + size_t buffer_len; + + printf("Opened.. "); + + /* Get the length of the file. */ + fseek(infile, 0L, SEEK_END); + buffer_len = ftell(infile); + + /* Reset the file indicator to the beginning of the file. */ + fseek(infile, 0L, SEEK_SET); + + /* Allocate a buffer for the file contents. */ + buffer = (uint8_t *)calloc(buffer_len, sizeof(uint8_t)); + if(buffer) + { + /* Read all the text from the file into the buffer. */ + fread(buffer, sizeof(uint8_t), buffer_len, infile); + printf("Read %zu bytes, fuzzing.. ", buffer_len); + + /* Call the fuzzer with the data. */ + LLVMFuzzerTestOneInput(buffer, buffer_len); + + printf("complete !!"); + + /* Free the buffer as it's no longer needed. */ + free(buffer); + buffer = NULL; + } + else + { + fprintf(stderr, + "[%s] Failed to allocate %zu bytes \n", + argv[ii], + buffer_len); + } + + /* Close the file as it's no longer needed. */ + fclose(infile); + infile = NULL; + } + else + { + /* Failed to open the file. Maybe wrong name or wrong permissions? */ + fprintf(stderr, "[%s] Open failed. \n", argv[ii]); + } + + printf("\n"); + } +} |