]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fuzz test cases for UPSERT.
authordrh <drh@noemail.net>
Tue, 8 May 2018 12:49:53 +0000 (12:49 +0000)
committerdrh <drh@noemail.net>
Tue, 8 May 2018 12:49:53 +0000 (12:49 +0000)
FossilOrigin-Name: fd11fbd21893d520de5a2249f825ecb5839fa4943f5c207e9e9bf8b52f4e2695

Makefile.in
Makefile.msc
main.mk
manifest
manifest.uuid
test/fuzzcheck.c
test/fuzzdata6.db [new file with mode: 0644]

index a3ec869643c50aac67c39b499e1a35b9a85855f6..ac84fe832cbde6be814bc50a0a0386a27b701806 100644 (file)
@@ -572,7 +572,8 @@ FUZZDATA = \
   $(TOP)/test/fuzzdata2.db \
   $(TOP)/test/fuzzdata3.db \
   $(TOP)/test/fuzzdata4.db \
-  $(TOP)/test/fuzzdata5.db
+  $(TOP)/test/fuzzdata5.db \
+  $(TOP)/test/fuzzdata6.db
 
 # Standard options to testfixture
 #
index 50119d836110bab1799a65e31cc4e86f12de1124..8513996b6a0a887fcb55536368fe64cf3055cbc6 100644 (file)
@@ -1599,7 +1599,8 @@ FUZZDATA = \
   $(TOP)\test\fuzzdata2.db \
   $(TOP)\test\fuzzdata3.db \
   $(TOP)\test\fuzzdata4.db \
-  $(TOP)\test\fuzzdata5.db
+  $(TOP)\test\fuzzdata5.db \
+  $(TOP)\test\fuzzdata6.db
 # <</mark>>
 
 # Additional compiler options for the shell.  These are only effective
diff --git a/main.mk b/main.mk
index b590b79cb1bb0a4ff185b5dc3f570fbd4a6ed835..8dc423c5b51c7bd636e74a06dd1b1ca3cc3b2f3b 100644 (file)
--- a/main.mk
+++ b/main.mk
@@ -501,7 +501,8 @@ FUZZDATA = \
   $(TOP)/test/fuzzdata2.db \
   $(TOP)/test/fuzzdata3.db \
   $(TOP)/test/fuzzdata4.db \
-  $(TOP)/test/fuzzdata5.db
+  $(TOP)/test/fuzzdata5.db \
+  $(TOP)/test/fuzzdata6.db
 
 # Standard options to testfixture
 #
index 1db4fc0b69661caad97277514df80d25a82c34f2..eb997c914d53da7363945703d9b26255d033a4c1 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,10 +1,10 @@
-C Activate\sthe\scell-overwrite\soptimization\sfor\sindex\sb-trees.
-D 2018-05-07T18:41:19.103
+C Fuzz\stest\scases\sfor\sUPSERT.
+D 2018-05-08T12:49:53.757
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
-F Makefile.in 5ce9343cba9c189046f1afe6d2bcc1f68079439febc05267b98aec6ecc752439
+F Makefile.in bfc40f350586923e0419d2ea4b559c37ec10ee4b6e210e08c14401f8e340f0da
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
-F Makefile.msc 59179295f6a9b433e3f59a6dc2fcf6db6fcac35d92015294beb5d27f2924ebb9
+F Makefile.msc 681fb88cccf1fd58c0b9648f6a09b75332206ef72ca76012ad11699c320cec5f
 F README.md 7764d56778d567913ef11c82da9ab94aefa0826f7c243351e4e2d7adaef6f373
 F VERSION b7c9d1d11cb70ef8e90cfcf3c944aa58a9f801cc2ad487eebb0a110c16dfc2df
 F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50
@@ -415,7 +415,7 @@ F ext/userauth/userauth.c 3410be31283abba70255d71fd24734e017a4497f
 F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x
 F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8
 F magic.txt 8273bf49ba3b0c8559cb2774495390c31fd61c60
-F main.mk 068618fe288bf9d93091b808be73e26a93fb2db8435328cc5760f9dd35ba168b
+F main.mk 3f50dfe5cb4257c1aca96e417636ed51bc2561e71d31a21e9ccdf66feb912f43
 F mkso.sh fd21c06b063bb16a5d25deea1752c2da6ac3ed83
 F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271
 F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504
@@ -940,12 +940,13 @@ F test/fuzz2.test 76dc35b32b6d6f965259508508abce75a6c4d7e1
 F test/fuzz3.test 9c813e6613b837cb7a277b0383cd66bfa07042b4cf0317157c35852f30043c31
 F test/fuzz_common.tcl a87dfbb88c2a6b08a38e9a070dabd129e617b45b
 F test/fuzz_malloc.test 5b257a7652d8ee90b22e9cf80d9dbea31a4f3e6fed1d33de57b24b1bdb211d79
-F test/fuzzcheck.c 5eb86c6ac96833ee622f45bf47e8045999c1b4b10d05e4eb809894a4b39f2f84
+F test/fuzzcheck.c ee575af6aaf2895a747592377719fb41f372407ef2026724f2bd16ff2985bbda
 F test/fuzzdata1.db 7ee3227bad0e7ccdeb08a9e6822916777073c664
 F test/fuzzdata2.db f03a420d3b822cc82e4f894ca957618fbe9c4973
 F test/fuzzdata3.db c6586d3e3cef0fbc18108f9bb649aa77bfc38aba
 F test/fuzzdata4.db 1882f0055fb63214d8407ddc7aca9b0b1c59af21
 F test/fuzzdata5.db 9f0cdcc5c6e83b90cf9ae343bd07f684d2da2de7
+F test/fuzzdata6.db 92a80e4afc172c24f662a10a612d188fb272de4a9bd19e017927c95f737de6d7
 F test/fuzzer1.test 3d4c4b7e547aba5e5511a2991e3e3d07166cfbb8
 F test/fuzzer2.test a85ef814ce071293bce1ad8dffa217cbbaad4c14
 F test/fuzzerfault.test 8792cd77fd5bce765b05d0c8e01b9edcf8af8536
@@ -1727,7 +1728,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 a4fe966da2fc479b18bf521ff596000410af3a611f7d8723d126795e595ccf22
-R 69af7d477dcc78b7b8e926f0c6facd33
+P a68697d10ef17d452c8279181186faad7bc54e3a35858a336552f717449065ea
+R 1614ac69cf68c4d847f0ba99f9a25462
 U drh
-Z 8d5036c02e569f6033a8ae94d4ec5845
+Z 407f037ea974d860203a22f1c66f9cc1
index 3d79611a88c5b79d1243b9445ac5bf28fce63191..9a55fdbd56ffee486dd86d874cc5da717c4fabee 100644 (file)
@@ -1 +1 @@
-a68697d10ef17d452c8279181186faad7bc54e3a35858a336552f717449065ea
\ No newline at end of file
+fd11fbd21893d520de5a2249f825ecb5839fa4943f5c207e9e9bf8b52f4e2695
\ No newline at end of file
index 01efc82ee5407f82f6130144c327d4cffc850f89..2ad382859b83b49b683f2c233168973dee38f59a 100644 (file)
@@ -720,11 +720,13 @@ static void rebuild_database(sqlite3 *db){
      "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"
+     "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"
      "DELETE FROM xsql;\n"
-     "INSERT INTO xsql(sqlid,sqltext) SELECT NULL, sqltext FROM sx ORDER BY 2;\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"
@@ -807,7 +809,7 @@ static void showHelp(void){
 "  -q|--quiet           Reduced output\n"
 "  --limit-mem N        Limit memory used by test SQLite instance to N bytes\n"
 "  --limit-vdbe         Panic if any test runs for more than 100,000 cycles\n"
-"  --load-sql ARGS...   Load SQL scripts fro files into SOURCE-DB\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"
 "  -m TEXT              Add a description to the database\n"
 "  --native-vfs         Use the native VFS for initially empty database files\n"
@@ -827,7 +829,7 @@ int main(int argc, char **argv){
   int quietFlag = 0;           /* True if --quiet or -q */
   int verboseFlag = 0;         /* True if --verbose or -v */
   char *zInsSql = 0;           /* SQL statement for --load-db or --load-sql */
-  int iFirstInsArg = 0;        /* First argv[] to use for --load-db or --load-sql */
+  int iFirstInsArg = 0;        /* First argv[] for --load-db or --load-sql */
   sqlite3 *db = 0;             /* The open database connection */
   sqlite3_stmt *pStmt;         /* A prepared statement */
   int rc;                      /* Result code from SQLite interface calls */
@@ -847,9 +849,9 @@ int main(int argc, char **argv){
   int iSrcDb;                  /* Loop over all source databases */
   int nTest = 0;               /* Total number of tests performed */
   char *zDbName = "";          /* Appreviated name of a source database */
-  const char *zFailCode = 0;   /* Value of the TEST_FAILURE environment variable */
+  const char *zFailCode = 0;   /* Value of the TEST_FAILURE env variable */
   int cellSzCkFlag = 0;        /* --cell-size-check */
-  int sqlFuzz = 0;             /* True for SQL fuzz testing. False for DB fuzz */
+  int sqlFuzz = 0;             /* True for SQL fuzz. False for DB fuzz */
   int iTimeout = 120;          /* Default 120-second timeout */
   int nMem = 0;                /* Memory limit */
   int nMemThisDb = 0;          /* Memory limit set by the CONFIG table */
@@ -860,12 +862,14 @@ int main(int argc, char **argv){
   int ossFuzzThisDb = 0;       /* ossFuzz value for this particular database */
   int nativeMalloc = 0;        /* Turn off MEMSYS3/5 and lookaside if true */
   sqlite3_vfs *pDfltVfs;       /* The default VFS */
+  int openFlags;               /* Flags for sqlite3_open_v2() */
 
   iBegin = timeOfDay();
 #ifdef __unix__
   signal(SIGALRM, timeoutHandler);
 #endif
   g.zArgv0 = argv[0];
+  openFlags = SQLITE_OPEN_READONLY;
   zFailCode = getenv("TEST_FAILURE");
   pDfltVfs = sqlite3_vfs_find(0);
   inmemVfsRegister(1);
@@ -906,18 +910,21 @@ int main(int argc, char **argv){
         vdbeLimitFlag = 1;
       }else
       if( strcmp(z,"load-sql")==0 ){
-        zInsSql = "INSERT INTO xsql(sqltext) VALUES(CAST(readfile(?1) AS text))";
+        zInsSql = "INSERT INTO xsql(sqltext)VALUES(CAST(readfile(?1) AS text))";
         iFirstInsArg = i+1;
+        openFlags = SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE;
         break;
       }else
       if( strcmp(z,"load-db")==0 ){
         zInsSql = "INSERT INTO db(dbcontent) VALUES(readfile(?1))";
         iFirstInsArg = i+1;
+        openFlags = SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE;
         break;
       }else
       if( strcmp(z,"m")==0 ){
         if( i>=argc-1 ) fatalError("missing arguments on %s", argv[i]);
         zMsg = argv[++i];
+        openFlags = SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE;
       }else
       if( strcmp(z,"native-malloc")==0 ){
         nativeMalloc = 1;
@@ -938,6 +945,7 @@ int main(int argc, char **argv){
       }else
       if( strcmp(z,"rebuild")==0 ){
         rebuildFlag = 1;
+        openFlags = SQLITE_OPEN_READWRITE;
       }else
       if( strcmp(z,"result-trace")==0 ){
         runFlags |= SQL_OUTPUT;
@@ -983,7 +991,7 @@ int main(int argc, char **argv){
   /* Process each source database separately */
   for(iSrcDb=0; iSrcDb<nSrcDb; iSrcDb++){
     rc = sqlite3_open_v2(azSrcDb[iSrcDb], &db,
-                         SQLITE_OPEN_READWRITE, pDfltVfs->zName);
+                         openFlags, pDfltVfs->zName);
     if( rc ){
       fatalError("cannot open source database %s - %s",
       azSrcDb[iSrcDb], sqlite3_errmsg(db));
@@ -1014,7 +1022,8 @@ int main(int argc, char **argv){
     /* If the CONFIG(name,value) table exists, read db-specific settings
     ** from that table */
     if( sqlite3_table_column_metadata(db,0,"config",0,0,0,0,0,0)==SQLITE_OK ){
-      rc = sqlite3_prepare_v2(db, "SELECT name, value FROM config", -1, &pStmt, 0);
+      rc = sqlite3_prepare_v2(db, "SELECT name, value FROM config",
+                                  -1, &pStmt, 0);
       if( rc ) fatalError("cannot prepare query of CONFIG table: %s",
                           sqlite3_errmsg(db));
       while( SQLITE_ROW==sqlite3_step(pStmt) ){
@@ -1053,7 +1062,8 @@ int main(int argc, char **argv){
       }
       sqlite3_finalize(pStmt);
       rc = sqlite3_exec(db, "COMMIT", 0, 0, 0);
-      if( rc ) fatalError("cannot commit the transaction: %s", sqlite3_errmsg(db));
+      if( rc ) fatalError("cannot commit the transaction: %s",
+                          sqlite3_errmsg(db));
       rebuild_database(db);
       sqlite3_close(db);
       return 0;
@@ -1197,7 +1207,8 @@ int main(int argc, char **argv){
         sqlite3_randomness(0,0);
         if( ossFuzzThisDb ){
 #ifndef SQLITE_OSS_FUZZ
-          fatalError("--oss-fuzz not supported: recompile with -DSQLITE_OSS_FUZZ");
+          fatalError("--oss-fuzz not supported: recompile"
+                     " with -DSQLITE_OSS_FUZZ");
 #else
           extern int LLVMFuzzerTestOneInput(const uint8_t*, size_t);
           LLVMFuzzerTestOneInput((const uint8_t*)pSql->a, (size_t)pSql->sz);
@@ -1216,7 +1227,8 @@ int main(int argc, char **argv){
           setAlarm(iTimeout);
 #ifndef SQLITE_OMIT_PROGRESS_CALLBACK
           if( sqlFuzz || vdbeLimitFlag ){
-            sqlite3_progress_handler(db, 100000, progressHandler, &vdbeLimitFlag);
+            sqlite3_progress_handler(db, 100000, progressHandler,
+                                     &vdbeLimitFlag);
           }
 #endif
           do{
diff --git a/test/fuzzdata6.db b/test/fuzzdata6.db
new file mode 100644 (file)
index 0000000..b1424c2
Binary files /dev/null and b/test/fuzzdata6.db differ