From a47e709e89db6011aa13727cb620bdc566bd33a0 Mon Sep 17 00:00:00 2001 From: drh Date: Fri, 25 Jan 2019 04:00:14 +0000 Subject: [PATCH 1/4] Add the ability to process dbsqlfuzz cases in fuzzcheck and add an initial set of interesting dbsqlfuzz cases. FossilOrigin-Name: fb9074ff450a67feaa62ca61d19154de26d5c8a8d147409ee6d1fbd667b2914f --- Makefile.in | 9 +- Makefile.msc | 15 +- main.mk | 8 +- manifest | 24 ++- manifest.uuid | 2 +- test/fuzzcheck.c | 475 +++++++++++++++++++++++++++++++++++++++++++++- test/fuzzdata8.db | Bin 0 -> 732160 bytes 7 files changed, 515 insertions(+), 18 deletions(-) create mode 100644 test/fuzzdata8.db diff --git a/Makefile.in b/Makefile.in index 43fb38a46f..3904e45c0e 100644 --- a/Makefile.in +++ b/Makefile.in @@ -589,7 +589,8 @@ FUZZDATA = \ $(TOP)/test/fuzzdata4.db \ $(TOP)/test/fuzzdata5.db \ $(TOP)/test/fuzzdata6.db \ - $(TOP)/test/fuzzdata7.db + $(TOP)/test/fuzzdata7.db \ + $(TOP)/test/fuzzdata8.db # Standard options to testfixture # @@ -612,6 +613,12 @@ FUZZERSHELL_OPT = -DSQLITE_ENABLE_JSON1 FUZZCHECK_OPT = -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_MEMSYS5 -DSQLITE_OSS_FUZZ FUZZCHECK_OPT += -DSQLITE_MAX_MEMORY=50000000 FUZZCHECK_OPT += -DSQLITE_PRINTF_PRECISION_LIMIT=1000 +FUZZCHECK_OPT += -DSQLITE_ENABLE_DESERIALIZE +FUZZCHECK_OPT += -DSQLITE_ENABLE_FTS4 +#FUZZCHECK_OPT += -DSQLITE_ENABLE_FTS5 +FUZZCHECK_OPT += -DSQLITE_ENABLE_RTREE +FUZZCHECK_OPT += -DSQLITE_ENABLE_GEOPOLY +FUZZCHECK_OPT += -DSQLITE_ENABLE_DBSTAT_VTAB FUZZCHECK_SRC = $(TOP)/test/fuzzcheck.c $(TOP)/test/ossfuzz.c DBFUZZ_OPT = diff --git a/Makefile.msc b/Makefile.msc index fdd1f98f9c..b4fa372f9a 100644 --- a/Makefile.msc +++ b/Makefile.msc @@ -1626,7 +1626,8 @@ FUZZDATA = \ $(TOP)\test\fuzzdata4.db \ $(TOP)\test\fuzzdata5.db \ $(TOP)\test\fuzzdata6.db \ - $(TOP)\test\fuzzdata7.db + $(TOP)\test\fuzzdata7.db \ + $(TOP)\test\fuzzdata8.db # <> # Additional compiler options for the shell. These are only effective @@ -1644,7 +1645,13 @@ SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_ENABLE_DESERIALIZE=1 # MPTESTER_COMPILE_OPTS = -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_FTS5 FUZZERSHELL_COMPILE_OPTS = -DSQLITE_ENABLE_JSON1 -FUZZCHECK_COMPILE_OPTS = -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_MEMSYS5 -DSQLITE_OSS_FUZZ -DSQLITE_MAX_MEMORY=50000000 -DSQLITE_PRINTF_PRECISION_LIMIT=1000 +FUZZCHECK_OPTS = -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_MEMSYS5 -DSQLITE_OSS_FUZZ -DSQLITE_MAX_MEMORY=50000000 -DSQLITE_PRINTF_PRECISION_LIMIT=1000 +FUZZCHECK_OPTS = $(FUZZCHECK_OPTS) -DSQLITE_ENABLE_DESERIALIZE +FUZZCHECK_OPTS = $(FUZZCHECK_OPTS) -DSQLITE_ENABLE_FTS4 +FUZZCHECK_OPTS = $(FUZZCHECK_OPTS) -DSQLITE_ENABLE_RTREE +FUZZCHECK_OPTS = $(FUZZCHECK_OPTS) -DSQLITE_ENABLE_GEOPOLY +FUZZCHECK_OPTS = $(FUZZCHECK_OPTS) -DSQLITE_ENABLE_DBSTAT_VTAB + FUZZCHECK_SRC = $(TOP)\test\fuzzcheck.c $(TOP)\test\ossfuzz.c OSSSHELL_SRC = $(TOP)\test\ossshell.c $(TOP)\test\ossfuzz.c DBFUZZ_COMPILE_OPTS = -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION @@ -1731,10 +1738,10 @@ dbfuzz.exe: $(TOP)\test\dbfuzz.c $(SQLITE3C) $(SQLITE3H) $(LTLINK) $(NO_WARN) $(DBFUZZ_COMPILE_OPTS) $(TOP)\test\dbfuzz.c $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS) fuzzcheck.exe: $(FUZZCHECK_SRC) $(SQLITE3C) $(SQLITE3H) - $(LTLINK) $(NO_WARN) $(FUZZCHECK_COMPILE_OPTS) $(FUZZCHECK_SRC) $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS) + $(LTLINK) $(NO_WARN) $(FUZZCHECK_OPTS) $(FUZZCHECK_SRC) $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS) ossshell.exe: $(OSSSHELL_SRC) $(SQLITE3C) $(SQLITE3H) - $(LTLINK) $(NO_WARN) $(FUZZCHECK_COMPILE_OPTS) $(OSSSHELL_SRC) $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS) + $(LTLINK) $(NO_WARN) $(FUZZCHECK_OPTS) $(OSSSHELL_SRC) $(SQLITE3C) /link $(LDFLAGS) $(LTLINKOPTS) sessionfuzz.exe: zlib $(TOP)\test\sessionfuzz.c $(SQLITE3C) $(SQLITE3H) $(LTLINK) $(NO_WARN) -I$(ZLIBINCDIR) $(TOP)\test\sessionfuzz.c /link $(LDFLAGS) $(LTLINKOPTS) /LIBPATH:$(ZLIBLIBDIR) $(ZLIBLIB) diff --git a/main.mk b/main.mk index 9667db3253..d18863b11e 100644 --- a/main.mk +++ b/main.mk @@ -510,7 +510,8 @@ FUZZDATA = \ $(TOP)/test/fuzzdata4.db \ $(TOP)/test/fuzzdata5.db \ $(TOP)/test/fuzzdata6.db \ - $(TOP)/test/fuzzdata7.db + $(TOP)/test/fuzzdata7.db \ + $(TOP)/test/fuzzdata8.db # Standard options to testfixture # @@ -531,6 +532,11 @@ FUZZERSHELL_OPT = -DSQLITE_ENABLE_JSON1 FUZZCHECK_OPT = -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_MEMSYS5 FUZZCHECK_OPT += -DSQLITE_MAX_MEMORY=50000000 FUZZCHECK_OPT += -DSQLITE_PRINTF_PRECISION_LIMIT=1000 +FUZZCHECK_OPT += -DSQLITE_ENABLE_DESERIALIZE +FUZZCHECK_OPT += -DSQLITE_ENABLE_FTS4 +FUZZCHECK_OPT += -DSQLITE_ENABLE_RTREE +FUZZCHECK_OPT += -DSQLITE_ENABLE_GEOPOLY +FUZZCHECK_OPT += -DSQLITE_ENABLE_DBSTAT_VTAB DBFUZZ_OPT = KV_OPT = -DSQLITE_THREADSAFE=0 -DSQLITE_DIRECT_OVERFLOW_READ ST_OPT = -DSQLITE_THREADSAFE=0 diff --git a/manifest b/manifest index eeded3f3c7..1a0ca0401f 100644 --- a/manifest +++ b/manifest @@ -1,10 +1,10 @@ -C Fix\sa\sbuffer\soverread\sin\sfts3\sthat\scould\soccur\sin\sa\sprefix\squery\son\sa\scorrupted\sdatabase. -D 2019-01-24T17:41:12.741 +C Add\sthe\sability\sto\sprocess\sdbsqlfuzz\scases\sin\sfuzzcheck\sand\sadd\san\sinitial\nset\sof\sinteresting\sdbsqlfuzz\scases. +D 2019-01-25T04:00:14.721 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea -F Makefile.in 0e7c107ebcaff26681bc5bcf017557db85aa828d6f7fd652d748b7a78072c298 +F Makefile.in 9947eae873c07ae894d4c8633b76c0a0daca7b9fd54401096a77d1a6c7b74359 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 -F Makefile.msc e04060b2138cefc198809d7adad70aebb4a667520b9133fe07a90a1769522dc7 +F Makefile.msc 5df60c70edb157feb2148a14c687551969599bd065875a0b959b6b139721ca72 F README.md 377233394b905d3b2e2b33741289e093bc93f2e7adbe00923b2c5958c9a9edee F VERSION 453e2f4529ca208196d5567db28d549d7151f79efd33f6e6cfe6e613e583a0be F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50 @@ -436,7 +436,7 @@ F ext/userauth/userauth.c f81aa5a3ecacf406f170c62a144405858f6f6de51dbdc0920134e6 F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8 F magic.txt 8273bf49ba3b0c8559cb2774495390c31fd61c60 -F main.mk 468c42acafaf69ae8d514d40cae78343b1d825aabd82e0368f6a3bcf8e4d2469 +F main.mk e28b19556f75ba6e841fc9c883d6a3c16edeae2d16d4edf32bf3c150725fc4d8 F mkso.sh fd21c06b063bb16a5d25deea1752c2da6ac3ed83 F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271 F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504 @@ -984,7 +984,7 @@ F test/fuzz3.test 9c813e6613b837cb7a277b0383cd66bfa07042b4cf0317157c35852f30043c F test/fuzz4.test c229bcdb45518a89e1d208a21343e061503460ac69fae1539320a89f572eb634 F test/fuzz_common.tcl a87dfbb88c2a6b08a38e9a070dabd129e617b45b F test/fuzz_malloc.test f348276e732e814802e39f042b1f6da6362a610af73a528d8f76898fde6b22f2 -F test/fuzzcheck.c 6edb2a0b6c8113cdac10f8e35b891be1a1b08ebacb1c2e2f93876d4d056e8e15 +F test/fuzzcheck.c 4082901a0665a5135b295fe81aa0ee325d42e1e28a0e3058a4082d249a321899 F test/fuzzdata1.db 7ee3227bad0e7ccdeb08a9e6822916777073c664 F test/fuzzdata2.db 128b3feeb78918d075c9b14b48610145a0dd4c8d6f1ca7c2870c7e425f5bf31f F test/fuzzdata3.db c6586d3e3cef0fbc18108f9bb649aa77bfc38aba @@ -992,6 +992,7 @@ F test/fuzzdata4.db b502c7d5498261715812dd8b3c2005bad08b3a26e6489414bd13926cd3e4 F test/fuzzdata5.db e35f64af17ec48926481cfaf3b3855e436bd40d1cfe2d59a9474cb4b748a52a5 F test/fuzzdata6.db 92a80e4afc172c24f662a10a612d188fb272de4a9bd19e017927c95f737de6d7 F test/fuzzdata7.db 3fc78e65dfe0be9df9e262075d5a335f18f627da47dfc691d1a7b822f34d4b99 +F test/fuzzdata8.db 8a96892bd2535578ff2ca27db823b7e149cfce6694c15ca80521fa758be605b1 F test/fuzzer1.test 3d4c4b7e547aba5e5511a2991e3e3d07166cfbb8 F test/fuzzer2.test a85ef814ce071293bce1ad8dffa217cbbaad4c14 F test/fuzzerfault.test 8792cd77fd5bce765b05d0c8e01b9edcf8af8536 @@ -1802,7 +1803,10 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 2d9cd06715092c312c8c0ec392696a0e90ed090b074e2082e0b830f1399aa941 -R aefdd33a1c83587ad3b0becf4339d1cc -U dan -Z df47a0dfd1efad16167473814c8098a6 +P d0d5689371577b2861d4a9464443d055f3256f3f51d89e0388233a4cbe2601ee +R a483eb7b902b414248e92f9e64472126 +T *branch * dbsqlfuzz-in-fuzzcheck +T *sym-dbsqlfuzz-in-fuzzcheck * +T -sym-trunk * +U drh +Z 174f299274057b1d40bc6ac9348469f7 diff --git a/manifest.uuid b/manifest.uuid index c8a242b3f7..71191813f9 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -d0d5689371577b2861d4a9464443d055f3256f3f51d89e0388233a4cbe2601ee \ No newline at end of file +fb9074ff450a67feaa62ca61d19154de26d5c8a8d147409ee6d1fbd667b2914f \ No newline at end of file diff --git a/test/fuzzcheck.c b/test/fuzzcheck.c index 0db4167445..3175bf33e7 100644 --- a/test/fuzzcheck.c +++ b/test/fuzzcheck.c @@ -69,6 +69,7 @@ #include #include #include +#include #include "sqlite3.h" #define ISSPACE(X) isspace((unsigned char)(X)) #define ISDIGIT(X) isdigit((unsigned char)(X)) @@ -400,7 +401,6 @@ static void blobListFree(Blob *p){ } } - /* Return the current wall-clock time */ static sqlite3_int64 timeOfDay(void){ static sqlite3_vfs *clockVfs = 0; @@ -419,6 +419,448 @@ static sqlite3_int64 timeOfDay(void){ return t; } +/*************************************************************************** +** Code to process combined database+SQL scripts generated by the +** dbsqlfuzz fuzzer. +*/ + +/* An instance of the following object is passed by pointer as the +** client data to various callbacks. +*/ +typedef struct FuzzCtx { + sqlite3 *db; /* The database connection */ + sqlite3_int64 iCutoffTime; /* Stop processing at this time. */ + sqlite3_int64 iLastCb; /* Time recorded for previous progress callback */ + sqlite3_int64 mxInterval; /* Longest interval between two progress calls */ + unsigned nCb; /* Number of progress callbacks */ + unsigned mxCb; /* Maximum number of progress callbacks allowed */ + unsigned execCnt; /* Number of calls to the sqlite3_exec callback */ + int timeoutHit; /* True when reaching a timeout */ +} FuzzCtx; + +/* Verbosity level for the dbsqlfuzz test runner */ +static int eVerbosity = 0; + +/* True to activate PRAGMA vdbe_debug=on */ +static int bVdbeDebug = 0; + +/* Timeout for each fuzzing attempt, in milliseconds */ +static int iTimeout = 10000; /* Defaults to 10 seconds */ + +/* Maximum number of progress handler callbacks */ +static unsigned int mxProgressCb = 2000; + +/* Maximum string length in SQLite */ +static int lengthLimit = 1000000; + +/* Maximum byte-code program length in SQLite */ +static int vdbeOpLimit = 25000; + +/* Maximum size of the in-memory database */ +static sqlite3_int64 maxDbSize = 104857600; + +/* +** Translate a single byte of Hex into an integer. +** This routine only works if h really is a valid hexadecimal +** character: 0..9a..fA..F +*/ +static unsigned int hexToInt(unsigned int h){ +#ifdef SQLITE_EBCDIC + h += 9*(1&~(h>>4)); /* EBCDIC */ +#else + h += 9*(1&(h>>6)); /* ASCII */ +#endif + return h & 0xf; +} + +/* +** The first character of buffer zIn[0..nIn-1] is a '['. This routine +** checked to see if the buffer holds "[NNNN]" or "[+NNNN]" and if it +** does it makes corresponding changes to the *pK value and *pI value +** and returns true. If the input buffer does not match the patterns, +** no changes are made to either *pK or *pI and this routine returns false. +*/ +static int isOffset( + const unsigned char *zIn, /* Text input */ + int nIn, /* Bytes of input */ + unsigned int *pK, /* half-byte cursor to adjust */ + unsigned int *pI /* Input index to adjust */ +){ + int i; + unsigned int k = 0; + unsigned char c; + for(i=1; i=nAlloc ){ + sqlite3_uint64 newSize; + if( nAlloc==MX_FILE_SZ || j>=MX_FILE_SZ ){ + if( eVerbosity ){ + fprintf(stderr, "Input database too big: max %d bytes\n", + MX_FILE_SZ); + } + sqlite3_free(a); + return -1; + } + newSize = nAlloc*2; + if( newSize<=j ){ + newSize = (j+4096)&~4095; + } + if( newSize>MX_FILE_SZ ){ + if( j>=MX_FILE_SZ ){ + sqlite3_free(a); + return -1; + } + newSize = MX_FILE_SZ; + } + a = sqlite3_realloc( a, newSize ); + if( a==0 ){ + fprintf(stderr, "Out of memory!\n"); + exit(1); + } + assert( newSize > nAlloc ); + memset(a+nAlloc, 0, newSize - nAlloc); + nAlloc = newSize; + } + if( j>=(unsigned)mx ){ + mx = (j + 4095)&~4095; + if( mx>MX_FILE_SZ ) mx = MX_FILE_SZ; + } + assert( j=p->iCutoffTime; + sqlite3_int64 iDiff = iNow - p->iLastCb; + if( iDiff > p->mxInterval ) p->mxInterval = iDiff; + p->nCb++; + if( rc==0 && p->mxCb>0 && p->mxCb<=p->nCb ) rc = 1; + if( rc && !p->timeoutHit && eVerbosity ){ + printf("Timeout on progress callback %d\n", p->nCb); + fflush(stdout); + p->timeoutHit = 1; + } + return rc; +} + +/* +** Disallow debugging pragmas such as "PRAGMA vdbe_debug" and +** "PRAGMA parser_trace" since they can dramatically increase the +** amount of output without actually testing anything useful. +** +** Also block ATTACH and DETACH +*/ +static int block_troublesome_sql( + void *Notused, + int eCode, + const char *zArg1, + const char *zArg2, + const char *zArg3, + const char *zArg4 +){ + (void)Notused; + (void)zArg2; + (void)zArg3; + (void)zArg4; + if( eCode==SQLITE_PRAGMA ){ + if( sqlite3_strnicmp("vdbe_", zArg1, 5)==0 + || sqlite3_stricmp("parser_trace", zArg1)==0 + || sqlite3_stricmp("temp_store_directory", zArg1)==0 + ){ + return SQLITE_DENY; + } + }else if( (eCode==SQLITE_ATTACH || eCode==SQLITE_DETACH) + && zArg1 && zArg1[0] ){ + return SQLITE_DENY; + } + return SQLITE_OK; +} + +/* +** Run the SQL text +*/ +static int runDbSql(sqlite3 *db, const char *zSql){ + int rc; + sqlite3_stmt *pStmt; + while( isspace(zSql[0]) ) zSql++; + if( zSql[0]==0 ) return SQLITE_OK; + if( eVerbosity>=3 ){ + printf("RUNNING-SQL: [%s]\n", zSql); + fflush(stdout); + } + rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0); + if( rc==SQLITE_OK ){ + while( (rc = sqlite3_step(pStmt))==SQLITE_ROW ){ + if( eVerbosity>=4 ){ + int j; + for(j=0; j=4 ) */ + } /* End while( SQLITE_ROW */ + if( rc!=SQLITE_DONE && eVerbosity>=3 ){ + printf("SQL-ERROR: (%d) %s\n", rc, sqlite3_errmsg(db)); + fflush(stdout); + } + }else if( eVerbosity>=3 ){ + printf("SQL-ERROR (%d): %s\n", rc, sqlite3_errmsg(db)); + fflush(stdout); + } /* End if( SQLITE_OK ) */ + return sqlite3_finalize(pStmt); +} + +/* Invoke this routine to run a single test case */ +int runCombinedDbSqlInput(const uint8_t *aData, size_t nByte){ + int rc; /* SQLite API return value */ + int iSql; /* Index in aData[] of start of SQL */ + unsigned char *aDb = 0; /* Decoded database content */ + int nDb = 0; /* Size of the decoded database */ + int i; /* Loop counter */ + int j; /* Start of current SQL statement */ + char *zSql = 0; /* SQL text to run */ + int nSql; /* Bytes of SQL text */ + FuzzCtx cx; /* Fuzzing context */ + + if( nByte<10 ) return 0; + if( sqlite3_initialize() ) return 0; + if( sqlite3_memory_used()!=0 ){ + int nAlloc = 0; + int nNotUsed = 0; + sqlite3_status(SQLITE_STATUS_MALLOC_COUNT, &nAlloc, &nNotUsed, 0); + fprintf(stderr,"Memory leak in mutator: %lld bytes in %d allocations\n", + sqlite3_memory_used(), nAlloc); + exit(1); + } + memset(&cx, 0, sizeof(cx)); + iSql = decodeDatabase((unsigned char*)aData, (int)nByte, &aDb, &nDb); + if( iSql<0 ) return 0; + nSql = nByte - iSql; + if( eVerbosity>=2 ){ + printf( + "****** %d-byte input, %d-byte database, %d-byte script " + "******\n", (int)nByte, nDb, nSql); + fflush(stdout); + } + rc = sqlite3_open(0, &cx.db); + if( rc ) return 1; + if( bVdbeDebug ){ + sqlite3_exec(cx.db, "PRAGMA vdbe_debug=ON", 0, 0, 0); + } + + /* Invoke the progress handler frequently to check to see if we + ** are taking too long. The progress handler will return true + ** (which will block further processing) if more than iTimeout seconds have + ** elapsed since the start of the test. + */ + cx.iLastCb = timeOfDay(); + cx.iCutoffTime = cx.iLastCb + iTimeout; /* Now + iTimeout seconds */ + cx.mxCb = mxProgressCb; +#ifndef SQLITE_OMIT_PROGRESS_CALLBACK + sqlite3_progress_handler(cx.db, 10, progress_handler, (void*)&cx); +#endif + + /* Set a limit on the maximum size of a prepared statement, and the + ** maximum length of a string or blob */ + if( vdbeOpLimit>0 ){ + sqlite3_limit(cx.db, SQLITE_LIMIT_VDBE_OP, vdbeOpLimit); + } + if( lengthLimit>0 ){ + sqlite3_limit(cx.db, SQLITE_LIMIT_LENGTH, lengthLimit); + } + + if( nDb>=20 && aDb[18]==2 && aDb[19]==2 ){ + aDb[18] = aDb[19] = 1; + } + rc = sqlite3_deserialize(cx.db, "main", aDb, nDb, nDb, + SQLITE_DESERIALIZE_RESIZEABLE | + SQLITE_DESERIALIZE_FREEONCLOSE); + if( rc ){ + fprintf(stderr, "sqlite3_deserialize() failed with %d\n", rc); + goto testrun_finished; + } + if( maxDbSize>0 ){ + sqlite3_int64 x = maxDbSize; + sqlite3_file_control(cx.db, "main", SQLITE_FCNTL_SIZE_LIMIT, &x); + } + + /* Block debug pragmas and ATTACH/DETACH. But wait until after + ** deserialize to do this because deserialize depends on ATTACH */ + sqlite3_set_authorizer(cx.db, block_troublesome_sql, 0); + + /* Consistent PRNG seed */ + sqlite3_randomness(0,0); + + zSql = sqlite3_malloc( nSql + 1 ); + if( zSql==0 ){ + fprintf(stderr, "Out of memory!\n"); + }else{ + memcpy(zSql, aData+iSql, nSql); + zSql[nSql] = 0; + for(i=j=0; zSql[i]; i++){ + if( zSql[i]==';' ){ + char cSaved = zSql[i+1]; + zSql[i+1] = 0; + if( sqlite3_complete(zSql+j) ){ + rc = runDbSql(cx.db, zSql+j); + j = i+1; + } + zSql[i+1] = cSaved; + if( rc==SQLITE_INTERRUPT || progress_handler(&cx) ){ + goto testrun_finished; + } + } + } + if( j4 && memcmp(a,"\n--\n",4)==0 ) return 1; + while( n>0 && isspace(a[0]) ){ a++; n--; } + if( n>8 && memcmp(a,"53514c69",8)==0 ) return 1; + return 0; +} + + /* Methods for the VHandle object */ static int inmemClose(sqlite3_file *pFile){ @@ -951,6 +1393,7 @@ int main(int argc, char **argv){ if( strcmp(z,"quiet")==0 || strcmp(z,"q")==0 ){ quietFlag = 1; verboseFlag = 0; + eVerbosity = 0; }else if( strcmp(z,"rebuild")==0 ){ rebuildFlag = 1; @@ -976,8 +1419,18 @@ int main(int argc, char **argv){ if( strcmp(z,"verbose")==0 || strcmp(z,"v")==0 ){ quietFlag = 0; verboseFlag++; + eVerbosity++; if( verboseFlag>1 ) runFlags |= SQL_TRACE; }else + if( strcmp(z,"version")==0 ){ + int ii; + const char *z; + printf("SQLite %s %s\n", sqlite3_libversion(), sqlite3_sourceid()); + for(ii=0; (z = sqlite3_compileoption_get(ii))!=0; ii++){ + printf("%s\n", z); + } + return 0; + }else { fatalError("unknown option: %s", argv[i]); } @@ -1230,6 +1683,26 @@ int main(int argc, char **argv){ */ if( !verboseFlag && !quietFlag ) printf("%s:", zDbName); for(pSql=g.pFirstSql; pSql; pSql=pSql->pNext){ + if( isDbSql(pSql->a, pSql->sz) ){ + sqlite3_snprintf(sizeof(g.zTestName), g.zTestName, "sqlid=%d",pSql->id); + if( verboseFlag ){ + printf("%s\n", g.zTestName); + fflush(stdout); + }else if( !quietFlag ){ + static int prevAmt = -1; + int idx = pSql->seq; + int amt = idx*10/(g.nSql); + if( amt!=prevAmt ){ + printf(" %d%%", amt*10); + fflush(stdout); + prevAmt = amt; + } + } + runCombinedDbSqlInput(pSql->a, pSql->sz); + nTest++; + g.zTestName[0] = 0; + continue; + } for(pDb=g.pFirstDb; pDb; pDb=pDb->pNext){ int openFlags; const char *zVfs = "inmem"; diff --git a/test/fuzzdata8.db b/test/fuzzdata8.db new file mode 100644 index 0000000000000000000000000000000000000000..ba1723ee59d1590d47df19761fdf8c68da5a9cbe GIT binary patch literal 732160 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 Date: Fri, 25 Jan 2019 04:43:26 +0000 Subject: [PATCH 2/4] Improved automatic detection of dbsqlfuzz cases in fuzzcheck. FossilOrigin-Name: 1ef24e89c9630fd383ba32f5aefcf9c27907f27f5072f3537a1cfd75a093a8d7 --- manifest | 15 ++++++--------- manifest.uuid | 2 +- test/fuzzcheck.c | 23 ++++++++++++++--------- 3 files changed, 21 insertions(+), 19 deletions(-) diff --git a/manifest b/manifest index 1a0ca0401f..fb82c3f1fa 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sthe\sability\sto\sprocess\sdbsqlfuzz\scases\sin\sfuzzcheck\sand\sadd\san\sinitial\nset\sof\sinteresting\sdbsqlfuzz\scases. -D 2019-01-25T04:00:14.721 +C Improved\sautomatic\sdetection\sof\sdbsqlfuzz\scases\sin\sfuzzcheck. +D 2019-01-25T04:43:26.372 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 9947eae873c07ae894d4c8633b76c0a0daca7b9fd54401096a77d1a6c7b74359 @@ -984,7 +984,7 @@ F test/fuzz3.test 9c813e6613b837cb7a277b0383cd66bfa07042b4cf0317157c35852f30043c F test/fuzz4.test c229bcdb45518a89e1d208a21343e061503460ac69fae1539320a89f572eb634 F test/fuzz_common.tcl a87dfbb88c2a6b08a38e9a070dabd129e617b45b F test/fuzz_malloc.test f348276e732e814802e39f042b1f6da6362a610af73a528d8f76898fde6b22f2 -F test/fuzzcheck.c 4082901a0665a5135b295fe81aa0ee325d42e1e28a0e3058a4082d249a321899 +F test/fuzzcheck.c 1a65151681ada94f8543ccfe07fbd2d5ba509efdc74bd144569f8d61f242e707 F test/fuzzdata1.db 7ee3227bad0e7ccdeb08a9e6822916777073c664 F test/fuzzdata2.db 128b3feeb78918d075c9b14b48610145a0dd4c8d6f1ca7c2870c7e425f5bf31f F test/fuzzdata3.db c6586d3e3cef0fbc18108f9bb649aa77bfc38aba @@ -1803,10 +1803,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P d0d5689371577b2861d4a9464443d055f3256f3f51d89e0388233a4cbe2601ee -R a483eb7b902b414248e92f9e64472126 -T *branch * dbsqlfuzz-in-fuzzcheck -T *sym-dbsqlfuzz-in-fuzzcheck * -T -sym-trunk * +P fb9074ff450a67feaa62ca61d19154de26d5c8a8d147409ee6d1fbd667b2914f +R 1a930dbefe744ebdcb05eea9b0188b90 U drh -Z 174f299274057b1d40bc6ac9348469f7 +Z c5c751ac97a3bb1a31a35d47c24bdd62 diff --git a/manifest.uuid b/manifest.uuid index 71191813f9..698172e5dd 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -fb9074ff450a67feaa62ca61d19154de26d5c8a8d147409ee6d1fbd667b2914f \ No newline at end of file +1ef24e89c9630fd383ba32f5aefcf9c27907f27f5072f3537a1cfd75a093a8d7 \ No newline at end of file diff --git a/test/fuzzcheck.c b/test/fuzzcheck.c index 3175bf33e7..3fac76d9a2 100644 --- a/test/fuzzcheck.c +++ b/test/fuzzcheck.c @@ -604,7 +604,7 @@ static int progress_handler(void *pClientData) { if( iDiff > p->mxInterval ) p->mxInterval = iDiff; p->nCb++; if( rc==0 && p->mxCb>0 && p->mxCb<=p->nCb ) rc = 1; - if( rc && !p->timeoutHit && eVerbosity ){ + if( rc && !p->timeoutHit && eVerbosity>=2 ){ printf("Timeout on progress callback %d\n", p->nCb); fflush(stdout); p->timeoutHit = 1; @@ -653,14 +653,14 @@ static int runDbSql(sqlite3 *db, const char *zSql){ sqlite3_stmt *pStmt; while( isspace(zSql[0]) ) zSql++; if( zSql[0]==0 ) return SQLITE_OK; - if( eVerbosity>=3 ){ + if( eVerbosity>=4 ){ printf("RUNNING-SQL: [%s]\n", zSql); fflush(stdout); } rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0); if( rc==SQLITE_OK ){ while( (rc = sqlite3_step(pStmt))==SQLITE_ROW ){ - if( eVerbosity>=4 ){ + if( eVerbosity>=5 ){ int j; for(j=0; j=4 ) */ + } /* End if( eVerbosity>=5 ) */ } /* End while( SQLITE_ROW */ - if( rc!=SQLITE_DONE && eVerbosity>=3 ){ + if( rc!=SQLITE_DONE && eVerbosity>=4 ){ printf("SQL-ERROR: (%d) %s\n", rc, sqlite3_errmsg(db)); fflush(stdout); } - }else if( eVerbosity>=3 ){ + }else if( eVerbosity>=4 ){ printf("SQL-ERROR (%d): %s\n", rc, sqlite3_errmsg(db)); fflush(stdout); } /* End if( SQLITE_OK ) */ @@ -745,7 +745,7 @@ int runCombinedDbSqlInput(const uint8_t *aData, size_t nByte){ iSql = decodeDatabase((unsigned char*)aData, (int)nByte, &aDb, &nDb); if( iSql<0 ) return 0; nSql = nByte - iSql; - if( eVerbosity>=2 ){ + if( eVerbosity>=3 ){ printf( "****** %d-byte input, %d-byte database, %d-byte script " "******\n", (int)nByte, nDb, nSql); @@ -830,7 +830,7 @@ testrun_finished: if( rc!=SQLITE_OK ){ fprintf(stdout, "sqlite3_close() returns %d\n", rc); } - if( eVerbosity ){ + if( eVerbosity>=2 ){ fprintf(stdout, "Peak memory usages: %f MB\n", sqlite3_memory_highwater(1) / 1000000.0); } @@ -854,9 +854,14 @@ testrun_finished: ** true if this does appear to be a dbsqlfuzz test case and false otherwise. */ static int isDbSql(unsigned char *a, int n){ + unsigned char buf[12]; + int i; if( n>4 && memcmp(a,"\n--\n",4)==0 ) return 1; while( n>0 && isspace(a[0]) ){ a++; n--; } - if( n>8 && memcmp(a,"53514c69",8)==0 ) return 1; + for(i=0; n>0 && i<8; n--, a++){ + if( isxdigit(a[0]) ) buf[i++] = a[0]; + } + if( i==8 && memcmp(buf,"53514c69",8)==0 ) return 1; return 0; } From 725a9c7f6c0d406cac38d41d286c023dd5896417 Mon Sep 17 00:00:00 2001 From: drh Date: Fri, 25 Jan 2019 13:03:38 +0000 Subject: [PATCH 3/4] In fuzzcheck, activate vdbe_debug for dbsqlfuzz cases when using the -vvvvv verbosity level or above. FossilOrigin-Name: 2e6f7c2aced49824a38b3494b796a8ec73aa7a90b51159f670596df15ed1c5ab --- manifest | 12 ++++++------ manifest.uuid | 2 +- test/fuzzcheck.c | 27 ++++++++++++++++++++++++++- 3 files changed, 33 insertions(+), 8 deletions(-) diff --git a/manifest b/manifest index fb82c3f1fa..d073cbd167 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Improved\sautomatic\sdetection\sof\sdbsqlfuzz\scases\sin\sfuzzcheck. -D 2019-01-25T04:43:26.372 +C In\sfuzzcheck,\sactivate\svdbe_debug\sfor\sdbsqlfuzz\scases\swhen\susing\sthe\s-vvvvv\nverbosity\slevel\sor\sabove. +D 2019-01-25T13:03:38.630 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 9947eae873c07ae894d4c8633b76c0a0daca7b9fd54401096a77d1a6c7b74359 @@ -984,7 +984,7 @@ F test/fuzz3.test 9c813e6613b837cb7a277b0383cd66bfa07042b4cf0317157c35852f30043c F test/fuzz4.test c229bcdb45518a89e1d208a21343e061503460ac69fae1539320a89f572eb634 F test/fuzz_common.tcl a87dfbb88c2a6b08a38e9a070dabd129e617b45b F test/fuzz_malloc.test f348276e732e814802e39f042b1f6da6362a610af73a528d8f76898fde6b22f2 -F test/fuzzcheck.c 1a65151681ada94f8543ccfe07fbd2d5ba509efdc74bd144569f8d61f242e707 +F test/fuzzcheck.c b72e92f38747e4fe45b4df41a750a9ee3797f28e808c11b753d91d750a559c51 F test/fuzzdata1.db 7ee3227bad0e7ccdeb08a9e6822916777073c664 F test/fuzzdata2.db 128b3feeb78918d075c9b14b48610145a0dd4c8d6f1ca7c2870c7e425f5bf31f F test/fuzzdata3.db c6586d3e3cef0fbc18108f9bb649aa77bfc38aba @@ -1803,7 +1803,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P fb9074ff450a67feaa62ca61d19154de26d5c8a8d147409ee6d1fbd667b2914f -R 1a930dbefe744ebdcb05eea9b0188b90 +P 1ef24e89c9630fd383ba32f5aefcf9c27907f27f5072f3537a1cfd75a093a8d7 +R 78219aab4a0221491f08b172e31b7d10 U drh -Z c5c751ac97a3bb1a31a35d47c24bdd62 +Z 41b8e92f1ee93947404c7576345f9b31 diff --git a/manifest.uuid b/manifest.uuid index 698172e5dd..fced87f945 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -1ef24e89c9630fd383ba32f5aefcf9c27907f27f5072f3537a1cfd75a093a8d7 \ No newline at end of file +2e6f7c2aced49824a38b3494b796a8ec73aa7a90b51159f670596df15ed1c5ab \ No newline at end of file diff --git a/test/fuzzcheck.c b/test/fuzzcheck.c index 3fac76d9a2..45e2168356 100644 --- a/test/fuzzcheck.c +++ b/test/fuzzcheck.c @@ -793,6 +793,11 @@ int runCombinedDbSqlInput(const uint8_t *aData, size_t nByte){ sqlite3_file_control(cx.db, "main", SQLITE_FCNTL_SIZE_LIMIT, &x); } + /* For high debugging levels, turn on debug mode */ + if( eVerbosity>=5 ){ + sqlite3_exec(cx.db, "PRAGMA vdbe_debug=ON;", 0, 0, 0); + } + /* Block debug pragmas and ATTACH/DETACH. But wait until after ** deserialize to do this because deserialize depends on ATTACH */ sqlite3_set_authorizer(cx.db, block_troublesome_sql, 0); @@ -1242,6 +1247,19 @@ static int integerValue(const char *zArg){ return (int)(isNeg? -v : v); } +/* +** Return the number of "v" characters in a string. Return 0 if there +** are any characters in the string other than "v". +*/ +static int numberOfVChar(const char *z){ + int N = 0; + while( z[0] && z[0]=='v' ){ + z++; + N++; + } + return z[0]==0 ? N : 0; +} + /* ** Print sketchy documentation for this utility program */ @@ -1315,6 +1333,7 @@ int main(int argc, char **argv){ int nativeMalloc = 0; /* Turn off MEMSYS3/5 and lookaside if true */ sqlite3_vfs *pDfltVfs; /* The default VFS */ int openFlags4Data; /* Flags for sqlite3_open_v2() */ + int nV; /* How much to increase verbosity with -vvvv */ sqlite3_initialize(); iBegin = timeOfDay(); @@ -1421,12 +1440,18 @@ int main(int argc, char **argv){ fatalError("timeout is not available on non-unix systems"); #endif }else - if( strcmp(z,"verbose")==0 || strcmp(z,"v")==0 ){ + if( strcmp(z,"verbose")==0 ){ quietFlag = 0; verboseFlag++; eVerbosity++; if( verboseFlag>1 ) runFlags |= SQL_TRACE; }else + if( (nV = numberOfVChar(z))>=1 ){ + quietFlag = 0; + verboseFlag += nV; + eVerbosity += nV; + if( verboseFlag>1 ) runFlags |= SQL_TRACE; + }else if( strcmp(z,"version")==0 ){ int ii; const char *z; From 94f0a8342106b4e1af85bf658bdf1c12ed010c73 Mon Sep 17 00:00:00 2001 From: drh Date: Fri, 25 Jan 2019 14:16:01 +0000 Subject: [PATCH 4/4] Fix the xFetch method of the "memdb" VFS (used by deserialize) so that it is robust against corrupt database file. FossilOrigin-Name: 2c1ef40e787a6bc355b50168527a47eb09acd30d0d88cff8336a434ad554115d --- manifest | 12 ++++++------ manifest.uuid | 2 +- src/memdb.c | 9 +++++++-- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index d073cbd167..7850145fc8 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C In\sfuzzcheck,\sactivate\svdbe_debug\sfor\sdbsqlfuzz\scases\swhen\susing\sthe\s-vvvvv\nverbosity\slevel\sor\sabove. -D 2019-01-25T13:03:38.630 +C Fix\sthe\sxFetch\smethod\sof\sthe\s"memdb"\sVFS\s(used\sby\sdeserialize)\sso\sthat\sit\nis\srobust\sagainst\scorrupt\sdatabase\sfile. +D 2019-01-25T14:16:01.971 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F Makefile.in 9947eae873c07ae894d4c8633b76c0a0daca7b9fd54401096a77d1a6c7b74359 @@ -485,7 +485,7 @@ F src/mem1.c c12a42539b1ba105e3707d0e628ad70e611040d8f5e38cf942cee30c867083de F src/mem2.c f1940d9e91948dd6a908fbb9ce3835c36b5d83c3 F src/mem3.c 8768ac94694f31ffaf8b4d0ea5dc08af7010a35a F src/mem5.c 9bf955937b07f8c32541c8a9991f33ce3173d944 -F src/memdb.c 6099be387f1161e07b20e5ea5118348a6fb7eb55edcb487d6bea15ee917b37e4 +F src/memdb.c d95f6ad26f7c582026c5501b32dc0201ce781ad496bc61107d759b5e4e5c563a F src/memjournal.c 6f3d36a0a8f72f48f6c3c722f04301ac64f2515435fa42924293e46fc7994661 F src/msvc.h 4942752b6a253116baaa8de75256c51a459a5e81 F src/mutex.c bae36f8af32c22ad80bbf0ccebec63c252b6a2b86e4d3e42672ff287ebf4a604 @@ -1803,7 +1803,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 1ef24e89c9630fd383ba32f5aefcf9c27907f27f5072f3537a1cfd75a093a8d7 -R 78219aab4a0221491f08b172e31b7d10 +P 2e6f7c2aced49824a38b3494b796a8ec73aa7a90b51159f670596df15ed1c5ab +R d3c46f45cfa450474f5afffc67ad7b0c U drh -Z 41b8e92f1ee93947404c7576345f9b31 +Z 5dedbab04a9e53521f2d03819a9b0105 diff --git a/manifest.uuid b/manifest.uuid index fced87f945..ca48c4134a 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -2e6f7c2aced49824a38b3494b796a8ec73aa7a90b51159f670596df15ed1c5ab \ No newline at end of file +2c1ef40e787a6bc355b50168527a47eb09acd30d0d88cff8336a434ad554115d \ No newline at end of file diff --git a/src/memdb.c b/src/memdb.c index e7366961f3..75e83a95dc 100644 --- a/src/memdb.c +++ b/src/memdb.c @@ -310,8 +310,13 @@ static int memdbFetch( void **pp ){ MemFile *p = (MemFile *)pFile; - p->nMmap++; - *pp = (void*)(p->aData + iOfst); + if( iOfst+iAmt>p->sz ){ + assert( CORRUPT_DB ); + *pp = 0; + }else{ + p->nMmap++; + *pp = (void*)(p->aData + iOfst); + } return SQLITE_OK; }