LCOV - code coverage report
Current view: top level - x86_instruction_emulator - afl-harness.c (source / functions) Hit Total Coverage
Test: trace.lcov_info_final Lines: 23 37 62.2 %
Date: 2017-04-07 10:24:39 Functions: 1 1 100.0 %

          Line data    Source code
       1             : #include <assert.h>
       2             : #include <stdint.h>
       3             : #include <stdio.h>
       4             : #include <stdlib.h>
       5             : #include <string.h>
       6             : #include <getopt.h>
       7             : 
       8             : extern int LLVMFuzzerInitialize(int *argc, char ***argv);
       9             : extern int LLVMFuzzerTestOneInput(const uint8_t *data_p, size_t size);
      10             : extern unsigned int fuzz_minimal_input_size(void);
      11             : 
      12             : #define INPUT_SIZE  4096
      13             : static uint8_t input[INPUT_SIZE];
      14             : 
      15       45254 : int main(int argc, char **argv)
      16             : {
      17             :     size_t size;
      18       45254 :     FILE *fp = NULL;
      19             : 
      20       45254 :     setbuf(stdin, NULL);
      21       45254 :     setbuf(stdout, NULL);
      22             : 
      23             :     while ( 1 )
      24             :     {
      25             :         enum {
      26             :             OPT_MIN_SIZE,
      27             :         };
      28             :         static const struct option lopts[] = {
      29             :             { "min-input-size", no_argument, NULL, OPT_MIN_SIZE },
      30             :             { 0, 0, 0, 0 }
      31             :         };
      32       45254 :         int c = getopt_long_only(argc, argv, "", lopts, NULL);
      33             : 
      34       45254 :         if ( c == -1 )
      35       45254 :             break;
      36             : 
      37           0 :         switch ( c )
      38             :         {
      39             :         case OPT_MIN_SIZE:
      40           0 :             printf("%u\n", fuzz_minimal_input_size());
      41           0 :             exit(0);
      42             :             break;
      43             : 
      44             :         case '?':
      45             :         usage:
      46           0 :             printf("Usage: %s $FILE | [--min-input-size]\n", argv[0]);
      47           0 :             exit(-1);
      48             :             break;
      49             : 
      50             :         default:
      51           0 :             printf("Bad getopt return %d (%c)\n", c, c);
      52           0 :             exit(-1);
      53             :             break;
      54             :         }
      55             :     }
      56             : 
      57       45254 :     if ( optind == argc ) /* No positional parameters.  Use stdin. */
      58           0 :         fp = stdin;
      59       45254 :     else if ( optind != (argc - 1) )
      60           0 :         goto usage;
      61             : 
      62       45254 :     if ( LLVMFuzzerInitialize(&argc, &argv) )
      63           0 :         exit(-1);
      64             : 
      65             : #ifdef __AFL_HAVE_MANUAL_CONTROL
      66             :     __AFL_INIT();
      67             : 
      68             :     while ( __AFL_LOOP(1000) )
      69             : #endif
      70             :     {
      71       45254 :         if ( fp != stdin ) /* If not using stdin, open the provided file. */
      72             :         {
      73       45254 :             fp = fopen(argv[optind], "rb");
      74       45254 :             if ( fp == NULL )
      75             :             {
      76           0 :                 perror("fopen");
      77           0 :                 exit(-1);
      78             :             }
      79             :         }
      80             : 
      81       45254 :         size = fread(input, 1, INPUT_SIZE, fp);
      82             : 
      83       45254 :         if ( ferror(fp) )
      84             :         {
      85           0 :             perror("fread");
      86           0 :             exit(-1);
      87             :         }
      88             : 
      89       45254 :         if ( !feof(fp) )
      90             :         {
      91        1524 :             printf("Input too large\n");
      92        1524 :             exit(-1);
      93             :         }
      94             : 
      95       43730 :         if ( fp != stdin )
      96             :         {
      97       43730 :             fclose(fp);
      98       43730 :             fp = NULL;
      99             :         }
     100             : 
     101       43730 :         LLVMFuzzerTestOneInput(input, size);
     102             :     }
     103             : 
     104       43730 :     return 0;
     105             : }
     106             : 
     107             : /*
     108             :  * Local variables:
     109             :  * mode: C
     110             :  * c-file-style: "BSD"
     111             :  * c-basic-offset: 4
     112             :  * indent-tabs-mode: nil
     113             :  * End:
     114             :  */

Generated by: LCOV version 1.11