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