modernc.org/cc@v1.0.1/v2/testdata/_sqlite/test/ossshell.c (about)

     1  /*
     2  ** This is a test interface for the ossfuzz.c module.  The ossfuzz.c module
     3  ** is an adaptor for OSS-FUZZ.  (https://github.com/google/oss-fuzz)
     4  **
     5  ** This program links against ossfuzz.c.  It reads files named on the
     6  ** command line and passes them one by one into ossfuzz.c.
     7  */
     8  #include <stddef.h>
     9  #include <stdint.h>
    10  #include <stdio.h>
    11  #include <stdlib.h>
    12  #include <string.h>
    13  #include "sqlite3.h"
    14  
    15  /*
    16  ** The entry point in ossfuzz.c that this routine will be calling
    17  */
    18  int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size);
    19  
    20  /* Must match equivalent #defines in ossfuzz.c */
    21  #define FUZZ_SQL_TRACE       0x0001   /* Set an sqlite3_trace() callback */
    22  #define FUZZ_SHOW_MAX_DELAY  0x0002   /* Show maximum progress callback delay */
    23  #define FUZZ_SHOW_ERRORS     0x0004   /* Show SQL errors */
    24  extern void ossfuzz_set_debug_flags(unsigned);
    25  
    26  
    27  
    28  /*
    29  ** Read files named on the command-line and invoke the fuzzer for
    30  ** each one.
    31  */
    32  int main(int argc, char **argv){
    33    FILE *in;
    34    int i;
    35    int nErr = 0;
    36    uint8_t *zBuf = 0;
    37    size_t sz;
    38    unsigned mDebug = 0;
    39  
    40    for(i=1; i<argc; i++){
    41      const char *zFilename = argv[i];
    42      if( zFilename[0]=='-' ){
    43        if( zFilename[1]=='-' ) zFilename++;
    44        if( strcmp(zFilename, "-show-errors")==0 ){
    45          mDebug |= FUZZ_SHOW_ERRORS;
    46          ossfuzz_set_debug_flags(mDebug);
    47        }else
    48        if( strcmp(zFilename, "-show-max-delay")==0 ){
    49          mDebug |= FUZZ_SHOW_MAX_DELAY;
    50          ossfuzz_set_debug_flags(mDebug);
    51        }else
    52        if( strcmp(zFilename, "-sql-trace")==0 ){
    53          mDebug |= FUZZ_SQL_TRACE;
    54          ossfuzz_set_debug_flags(mDebug);
    55        }else
    56        {
    57          printf("unknown option \"%s\"\n", argv[i]);
    58          printf("should be one of: --show-errors --show-max-delay"
    59                 " --sql-trace\n");
    60          exit(1);
    61        }
    62        continue;
    63      }
    64      in = fopen(zFilename, "rb");
    65      if( in==0 ){
    66        fprintf(stderr, "cannot open \"%s\"\n", zFilename);
    67        nErr++;
    68        continue;
    69      }
    70      fseek(in, 0, SEEK_END);
    71      sz = ftell(in);
    72      rewind(in);
    73      zBuf = realloc(zBuf, sz);
    74      if( zBuf==0 ){
    75        fprintf(stderr, "cannot malloc() for %d bytes\n", (int)sz);
    76        exit(1);
    77      }
    78      if( fread(zBuf, sz, 1, in)!=1 ){
    79        fprintf(stderr, "cannot read %d bytes from \"%s\"\n",
    80                         (int)sz, zFilename);
    81        nErr++;
    82      }else{
    83        printf("%s... ", zFilename);
    84        if( mDebug ) printf("\n");
    85        fflush(stdout);
    86        (void)LLVMFuzzerTestOneInput(zBuf, sz);
    87        if( mDebug ) printf("%s: ", zFilename);
    88        printf("ok\n");
    89      }
    90      fclose(in);
    91    }
    92    free(zBuf);
    93    return nErr;
    94  }