aboutsummaryrefslogtreecommitdiff
path: root/c/fuzz/run_decode_fuzzer.cc
diff options
context:
space:
mode:
Diffstat (limited to 'c/fuzz/run_decode_fuzzer.cc')
-rw-r--r--c/fuzz/run_decode_fuzzer.cc44
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);
+}