From e5da9356e0295c97a86dc986131de475a0fd35cb Mon Sep 17 00:00:00 2001 From: drh Date: Sun, 27 Jan 2019 01:11:40 +0000 Subject: [PATCH] Update fuzzcheck so that with the --load-dbsql options it screens its inputs to ensure that they are valid dbsqlfuzz cases. Add new dbsqlfuzz finds to the test/fuzzdata8.db database. FossilOrigin-Name: 004f7d9bbeee049c22a7e1c82c6cc0ea79a237967de3ff57686acea3060d5f45 --- manifest | 14 +++++++------- manifest.uuid | 2 +- test/fuzzcheck.c | 41 ++++++++++++++++++++++++++++++++++------- test/fuzzdata8.db | Bin 732160 -> 808960 bytes 4 files changed, 42 insertions(+), 15 deletions(-) diff --git a/manifest b/manifest index e14607aea0..01911157f8 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Ensure\sthat\sthe\sbtree\scursor\sis\scorrectly\sset\sup\sprior\sto\sbacking\sit\sup\nas\spart\sof\sa\sdelete\soperation\son\sa\sdivider\scell\sin\san\sindex. -D 2019-01-26T23:34:50.536 +C Update\sfuzzcheck\sso\sthat\swith\sthe\s--load-dbsql\soptions\sit\sscreens\sits\ninputs\sto\sensure\sthat\sthey\sare\svalid\sdbsqlfuzz\scases.\s\sAdd\snew\sdbsqlfuzz\nfinds\sto\sthe\stest/fuzzdata8.db\sdatabase. +D 2019-01-27T01:11:40.746 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 4081b21460ce1f65b5904bdca27cf437476b414bf3f031fd4d6dfec58694b591 +F test/fuzzcheck.c 6bb28cc6ad247950e22bcc106bbeefff8c3c737f80c24573d8c18ef1cac6f2ac F test/fuzzdata1.db 7ee3227bad0e7ccdeb08a9e6822916777073c664 F test/fuzzdata2.db 128b3feeb78918d075c9b14b48610145a0dd4c8d6f1ca7c2870c7e425f5bf31f F test/fuzzdata3.db c6586d3e3cef0fbc18108f9bb649aa77bfc38aba @@ -992,7 +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/fuzzdata8.db e2e2d82c8f41f123a5e8e5a6db953143743ade9f23908eac224f5a2b39d55832 F test/fuzzer1.test 3d4c4b7e547aba5e5511a2991e3e3d07166cfbb8 F test/fuzzer2.test a85ef814ce071293bce1ad8dffa217cbbaad4c14 F test/fuzzerfault.test 8792cd77fd5bce765b05d0c8e01b9edcf8af8536 @@ -1804,7 +1804,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 d59567dda231e7ffec437d5e055676cf42d791196406cdc696cafa2583eb483b -R a26bc7cfbb63ac2a47ad91e615545d2f +P a3ea1a822d3a110f4f186f2fc8550f435c8c98635d058096b7be9d4df7066b8b +R 03df092f631b381cdd6c4288d6623f64 U drh -Z c383150dc1908979b363a955c6f6b956 +Z b86c20bb8077d2eac80dc37ebee27c9e diff --git a/manifest.uuid b/manifest.uuid index 9669b4732a..da82cd089b 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -a3ea1a822d3a110f4f186f2fc8550f435c8c98635d058096b7be9d4df7066b8b \ No newline at end of file +004f7d9bbeee049c22a7e1c82c6cc0ea79a237967de3ff57686acea3060d5f45 \ No newline at end of file diff --git a/test/fuzzcheck.c b/test/fuzzcheck.c index 7cedf94159..e050875669 100644 --- a/test/fuzzcheck.c +++ b/test/fuzzcheck.c @@ -870,6 +870,17 @@ static int isDbSql(unsigned char *a, int n){ return 0; } +/* Implementation of the isdbsql(TEXT) SQL function. +*/ +static void isDbSqlFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + int n = sqlite3_value_bytes(argv[0]); + unsigned char *a = (unsigned char*)sqlite3_value_blob(argv[0]); + sqlite3_result_int(context, a!=0 && n>0 && isDbSql(a,n)); +} /* Methods for the VHandle object */ @@ -1169,23 +1180,28 @@ static void runSql(sqlite3 *db, const char *zSql, unsigned runFlags){ ** (2) Put all entries in order ** (3) Vacuum */ -static void rebuild_database(sqlite3 *db){ +static void rebuild_database(sqlite3 *db, int dbSqlOnly){ int rc; - rc = sqlite3_exec(db, + char *zSql; + zSql = sqlite3_mprintf( "BEGIN;\n" "CREATE TEMP TABLE dbx AS SELECT DISTINCT dbcontent FROM db;\n" "DELETE FROM db;\n" "INSERT INTO db(dbid, dbcontent) " " SELECT NULL, dbcontent FROM dbx ORDER BY 2;\n" "DROP TABLE dbx;\n" - "CREATE TEMP TABLE sx AS SELECT DISTINCT sqltext FROM xsql;\n" + "CREATE TEMP TABLE sx AS SELECT DISTINCT sqltext FROM xsql %s;\n" "DELETE FROM xsql;\n" "INSERT INTO xsql(sqlid,sqltext) " " SELECT NULL, sqltext FROM sx ORDER BY 2;\n" "DROP TABLE sx;\n" "COMMIT;\n" "PRAGMA page_size=1024;\n" - "VACUUM;\n", 0, 0, 0); + "VACUUM;\n", + dbSqlOnly ? " WHERE isdbsql(sqltext)" : "" + ); + rc = sqlite3_exec(db, zSql, 0, 0, 0); + sqlite3_free(zSql); if( rc ) fatalError("cannot rebuild: %s", sqlite3_errmsg(db)); } @@ -1279,6 +1295,7 @@ static void showHelp(void){ " --limit-vdbe Panic if any test runs for more than 100,000 cycles\n" " --load-sql ARGS... Load SQL scripts fron files into SOURCE-DB\n" " --load-db ARGS... Load template databases from files into SOURCE_DB\n" +" --load-dbsql ARGS.. Load dbsqlfuzz outputs into the xsql table\n" " -m TEXT Add a description to the database\n" " --native-vfs Use the native VFS for initially empty database files\n" " --native-malloc Turn off MEMSYS3/5 and Lookaside\n" @@ -1305,6 +1322,7 @@ int main(int argc, char **argv){ Blob *pSql; /* For looping over SQL scripts */ Blob *pDb; /* For looping over template databases */ int i; /* Loop index for the argv[] loop */ + int dbSqlOnly = 0; /* Only use scripts that are dbsqlfuzz */ int onlySqlid = -1; /* --sqlid */ int onlyDbid = -1; /* --dbid */ int nativeFlag = 0; /* --native-vfs */ @@ -1361,7 +1379,7 @@ int main(int argc, char **argv){ if( i>=argc-1 ) fatalError("missing arguments on %s", argv[i]); zExpDb = argv[++i]; }else - if( strcmp(z,"export-sql")==0 ){ + if( strcmp(z,"export-sql")==0 || strcmp(z,"export-dbsql")==0 ){ if( i>=argc-1 ) fatalError("missing arguments on %s", argv[i]); zExpSql = argv[++i]; }else @@ -1396,6 +1414,13 @@ int main(int argc, char **argv){ openFlags4Data = SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE; break; }else + if( strcmp(z,"load-dbsql")==0 ){ + zInsSql = "INSERT INTO xsql(sqltext)VALUES(CAST(readfile(?1) AS text))"; + iFirstInsArg = i+1; + openFlags4Data = SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE; + dbSqlOnly = 1; + break; + }else if( strcmp(z,"m")==0 ){ if( i>=argc-1 ) fatalError("missing arguments on %s", argv[i]); zMsg = argv[++i]; @@ -1577,6 +1602,8 @@ int main(int argc, char **argv){ if( zInsSql ){ sqlite3_create_function(db, "readfile", 1, SQLITE_UTF8, 0, readfileFunc, 0, 0); + sqlite3_create_function(db, "isdbsql", 1, SQLITE_UTF8, 0, + isDbSqlFunc, 0, 0); rc = sqlite3_prepare_v2(db, zInsSql, -1, &pStmt, 0); if( rc ) fatalError("cannot prepare statement [%s]: %s", zInsSql, sqlite3_errmsg(db)); @@ -1592,7 +1619,7 @@ int main(int argc, char **argv){ rc = sqlite3_exec(db, "COMMIT", 0, 0, 0); if( rc ) fatalError("cannot commit the transaction: %s", sqlite3_errmsg(db)); - rebuild_database(db); + rebuild_database(db, dbSqlOnly); sqlite3_close(db); return 0; } @@ -1679,7 +1706,7 @@ int main(int argc, char **argv){ printf("%s: rebuilding... ", zDbName); fflush(stdout); } - rebuild_database(db); + rebuild_database(db, 0); if( !quietFlag ) printf("done\n"); } diff --git a/test/fuzzdata8.db b/test/fuzzdata8.db index ba1723ee59d1590d47df19761fdf8c68da5a9cbe..91d9c04a4a8a4158034c14297a717bb7b6009031 100644 GIT binary patch delta 26222 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 delta 19933 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