/* * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL licenses, (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * https://www.openssl.org/source/license.html * or in the file LICENSE in the source distribution. */ /* * Given a list of files, run each of them through the fuzzer. Note that * failure will be indicated by some kind of crash. Switching on things like * asan improves the test. */ #include #include #include #include #include #include "fuzzer.h" static int fuzz_bytes(unsigned char *buf, int num) { unsigned char val = 1; while (--num >= 0) *buf++ = val++; return 1; } static int fuzz_status(void) { return 1; } static RAND_METHOD fuzz_rand_method = { NULL, fuzz_bytes, NULL, NULL, fuzz_bytes, fuzz_status }; void FuzzerSetRand(void) { RAND_set_rand_method(&fuzz_rand_method); } int main(int argc, char **argv) { int n; FuzzerInitialize(&argc, &argv); for (n = 1; n < argc; ++n) { struct stat st; FILE *f; unsigned char *buf; size_t s; stat(argv[n], &st); f = fopen(argv[n], "rb"); if (f == NULL) continue; buf = malloc(st.st_size); s = fread(buf, 1, st.st_size, f); OPENSSL_assert(s == (size_t)st.st_size); FuzzerTestOneInput(buf, s); free(buf); fclose(f); } FuzzerCleanup(); return 0; }