From: drh Date: Mon, 26 Dec 2016 00:15:56 +0000 (+0000) Subject: Enhance the fuzztest utility with the --prng-seed option. Always reseed the X-Git-Tag: version-3.16.0~21 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=beaf514e2300cfdaa2d606fc9f3b9cbe89afaefc;p=thirdparty%2Fsqlite.git Enhance the fuzztest utility with the --prng-seed option. Always reseed the PRNG prior to each test. FossilOrigin-Name: 8c5187f69d719b69aa6eaf2dc8f89243e5979222 --- diff --git a/manifest b/manifest index f144229d72..2e7abd7f9e 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Combine\sthe\simplementations\sof\sthe\s".tables"\sand\s".indexes"\scommands\sin\sthe\ncommand-line\sshell.\s\sThe\s".indexes"\scommand\snow\sputs\sthe\sindexes\sin\smultiple\ncolumns,\sjust\slike\s".tables"\sand\sshows\sall\sindexes\sin\sall\sattached\sdatabases. -D 2016-12-24T21:32:40.591 +C Enhance\sthe\sfuzztest\sutility\swith\sthe\s--prng-seed\soption.\s\sAlways\sreseed\sthe\nPRNG\sprior\sto\seach\stest. +D 2016-12-26T00:15:56.766 F Makefile.in 41bd4cad981487345c4a84081074bcdb876e4b2e F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc b8ca53350ae545e3562403d5da2a69cec79308da @@ -816,7 +816,7 @@ F test/fuzz2.test 76dc35b32b6d6f965259508508abce75a6c4d7e1 F test/fuzz3.test b47377143f0c80f91ed29d722861077ff34415d5 F test/fuzz_common.tcl a87dfbb88c2a6b08a38e9a070dabd129e617b45b F test/fuzz_malloc.test 328f70aaca63adf29b4c6f06505ed0cf57ca7c26 -F test/fuzzcheck.c 5592b19e07b9061833a35eaf78869ad0c8b6cf33 +F test/fuzzcheck.c b5a3e54b100e65b008452a2d29193c7132af0b05 F test/fuzzdata1.db 7ee3227bad0e7ccdeb08a9e6822916777073c664 F test/fuzzdata2.db f03a420d3b822cc82e4f894ca957618fbe9c4973 F test/fuzzdata3.db c6586d3e3cef0fbc18108f9bb649aa77bfc38aba @@ -1539,7 +1539,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 2f481b854f04bec546eb172d1b6dbc88067d3fda -R c83fd4223f5b56b5947d45d91cd58312 +P def29333655691c7d54451193be13445a2857d29 +R e04e5338dd0157c18f4661e2b40e485c U drh -Z f50c0755f44c554bddf33086d9d8e98a +Z 34d4889fdc22385ba735ec50d68d537d diff --git a/manifest.uuid b/manifest.uuid index 021315cf1a..ab702bb52d 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -def29333655691c7d54451193be13445a2857d29 \ No newline at end of file +8c5187f69d719b69aa6eaf2dc8f89243e5979222 \ No newline at end of file diff --git a/test/fuzzcheck.c b/test/fuzzcheck.c index ccc4df8d37..90765ffc8d 100644 --- a/test/fuzzcheck.c +++ b/test/fuzzcheck.c @@ -133,6 +133,7 @@ static struct GlobalVars { Blob *pFirstDb; /* Content of first template database */ int nSql; /* Number of SQL scripts */ Blob *pFirstSql; /* First SQL script */ + unsigned int uRandom; /* Seed for the SQLite PRNG */ char zTestName[100]; /* Name of current test */ } g; @@ -595,10 +596,18 @@ static int inmemFullPathname( return SQLITE_OK; } +/* Always use the same random see, for repeatability. +*/ +static int inmemRandomness(sqlite3_vfs *NotUsed, int nBuf, char *zBuf){ + memset(zBuf, 0, nBuf); + memcpy(zBuf, &g.uRandom, nBufxRandomness; + inmemVfs.xRandomness = inmemRandomness; inmemVfs.xSleep = pDefault->xSleep; inmemVfs.xCurrentTimeInt64 = pDefault->xCurrentTimeInt64; - sqlite3_vfs_register(&inmemVfs, 0); + sqlite3_vfs_register(&inmemVfs, makeDefault); }; /* @@ -800,6 +809,7 @@ static void showHelp(void){ " -m TEXT Add a description to the database\n" " --native-vfs Use the native VFS for initially empty database files\n" " --oss-fuzz Enable OSS-FUZZ testing\n" +" --prng-seed N Seed value for the PRGN inside of SQLite\n" " --rebuild Rebuild and vacuum the database file\n" " --result-trace Show the results of each SQL command\n" " --sqlid N Use only SQL where sqlid=N\n" @@ -844,6 +854,7 @@ int main(int argc, char **argv){ void *pHeap = 0; /* Heap for use by SQLite */ int ossFuzz = 0; /* enable OSS-FUZZ testing */ int ossFuzzThisDb = 0; /* ossFuzz value for this particular database */ + sqlite3_vfs *pDfltVfs; /* The default VFS */ iBegin = timeOfDay(); #ifdef __unix__ @@ -851,6 +862,8 @@ int main(int argc, char **argv){ #endif g.zArgv0 = argv[0]; zFailCode = getenv("TEST_FAILURE"); + pDfltVfs = sqlite3_vfs_find(0); + inmemVfsRegister(1); for(i=1; i=argc-1 ) fatalError("missing arguments on %s", argv[i]); + g.uRandom = atoi(argv[++i]); + }else if( strcmp(z,"quiet")==0 || strcmp(z,"q")==0 ){ quietFlag = 1; verboseFlag = 0; @@ -957,7 +974,8 @@ int main(int argc, char **argv){ /* Process each source database separately */ for(iSrcDb=0; iSrcDbzName); if( rc ){ fatalError("cannot open source database %s - %s", azSrcDb[iSrcDb], sqlite3_errmsg(db)); @@ -1135,10 +1153,8 @@ int main(int argc, char **argv){ sqlite3_config(SQLITE_CONFIG_HEAP, pHeap, nMemThisDb, 128); } - /* Register the in-memory virtual filesystem - */ + /* Reset the in-memory virtual filesystem */ formatVfs(); - inmemVfsRegister(); /* Run a test using each SQL script against each database. */ @@ -1163,6 +1179,7 @@ int main(int argc, char **argv){ } } createVFile("main.db", pDb->sz, pDb->a); + sqlite3_randomness(0,0); if( ossFuzzThisDb ){ #ifndef SQLITE_OSS_FUZZ fatalError("--oss-fuzz not supported: recompile with -DSQLITE_OSS_FUZZ");