Home | History | Annotate | Line # | Download | only in fuzz
      1 /*
      2  * Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved.
      3  *
      4  * Licensed under the Apache License 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  * https://www.openssl.org/source/license.html
      8  * or in the file LICENSE in the source distribution.
      9  */
     10 #include <stdint.h>
     11 #include <unistd.h>
     12 #include <stdlib.h>
     13 #include <openssl/opensslconf.h>
     14 #include "fuzzer.h"
     15 
     16 #ifndef OPENSSL_NO_FUZZ_LIBFUZZER
     17 
     18 int LLVMFuzzerInitialize(int *argc, char ***argv);
     19 int LLVMFuzzerTestOneInput(const uint8_t *buf, size_t len);
     20 
     21 int LLVMFuzzerInitialize(int *argc, char ***argv)
     22 {
     23     return FuzzerInitialize(argc, argv);
     24 }
     25 
     26 int LLVMFuzzerTestOneInput(const uint8_t *buf, size_t len)
     27 {
     28     return FuzzerTestOneInput(buf, len);
     29 }
     30 
     31 #elif !defined(OPENSSL_NO_FUZZ_AFL)
     32 
     33 #define BUF_SIZE 65536
     34 
     35 int main(int argc, char **argv)
     36 {
     37     FuzzerInitialize(&argc, &argv);
     38 
     39     while (__AFL_LOOP(10000)) {
     40         uint8_t *buf = malloc(BUF_SIZE);
     41         size_t size = read(0, buf, BUF_SIZE);
     42 
     43         FuzzerTestOneInput(buf, size);
     44         free(buf);
     45     }
     46 
     47     FuzzerCleanup();
     48     return 0;
     49 }
     50 
     51 #else
     52 
     53 #error "Unsupported fuzzer"
     54 
     55 #endif
     56