]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
More aggressive early detection of orphaned and malformed autoindexes when
authordrh <drh@noemail.net>
Thu, 10 Jan 2019 14:33:15 +0000 (14:33 +0000)
committerdrh <drh@noemail.net>
Thu, 10 Jan 2019 14:33:15 +0000 (14:33 +0000)
parsing the schema.

FossilOrigin-Name: 10f9e39d6ed2413fa9abc6c82da3ed48f32a42b6190b6219fca7faf850d05113

manifest
manifest.uuid
src/prepare.c
test/dbfuzz001.test
test/fts3corrupt4.test
test/fts3fuzz001.test

index 5fb74c2faa2c62e1f7acc2d8cde167a1dfe9f638..86c77ee2699d65ed67fa378d88d69d5d430d26f5 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Use\sthe\snew\sSQLITE_IDXTYPE_IPK\svalues\s(3)\son\sIndex.idxType\sto\sindicate\sthe\nfake\sINTEGER\sPRIMARY\sKEY\sindex\sused\sduring\squery\splanning.
-D 2019-01-10T13:56:08.124
+C More\saggressive\searly\sdetection\sof\sorphaned\sand\smalformed\sautoindexes\swhen\nparsing\sthe\sschema.
+D 2019-01-10T14:33:15.650
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F Makefile.in d8b254f8bb81bab43c340d70d17dc3babab40fcc8a348c8255881f780a45fee6
@@ -507,7 +507,7 @@ F src/pcache.h 4f87acd914cef5016fae3030343540d75f5b85a1877eed1a2a19b9f284248586
 F src/pcache1.c fffd5250a323579384a3b3904302b9fe87e186ba24602af3013f749a0234ae98
 F src/pragma.c 20811b404b6d302a1bedd4b8af8aab2794c5e87ba1f5cb6b42dbc3266ad9c603
 F src/pragma.h fdd03d78a7497f74a3f652909f945328480089189526841ae829ce7313d98d13
-F src/prepare.c 18f1d2801ffb48b83fddf83375389886c788e98fdfb87eabe988cf53893602c7
+F src/prepare.c 63b8395d728cc63c3fdc6cb98eb01e1ce84d66c46aa3c32f38332ea789429922
 F src/printf.c 0f1177cf1dd4d7827bf64d840768514ec76409abecaca9e8b577dbd065150381
 F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384
 F src/resolve.c 5f2f987aacba7548d10781f808e1b933f80abe0b6bc8e9922bc18b1d1faba339
@@ -778,7 +778,7 @@ F test/dataversion1.test 6e5e86ac681f0782e766ebcb56c019ae001522d114e0e111e5ebf68
 F test/date.test 9b73bbeb1b82d9c1f44dec5cf563bf7da58d2373
 F test/date2.test 74c234bece1b016e94dd4ef9c8cc7a199a8806c0e2291cab7ba64bace6350b10
 F test/dbfuzz.c 73047c920d6210e5912c87cdffd9a1c281d4252e
-F test/dbfuzz001.test 96b52856ffce5442e404847de33487db5ce49aa27778497a42328d5acf6859d7
+F test/dbfuzz001.test 5659cbbc01e38678c119c8a58071cac59d0d6c71837a385f3d1838012f12e1e1
 F test/dbfuzz2-seed1.db e6225c6f3d7b63f9c5b6867146a5f329d997ab105bee64644dc2b3a2f2aebaee
 F test/dbfuzz2.c b8ed9b32a1f287505e55970e55203bedcb9170f137ecefa2254033c9faccdfba
 F test/dbpage.test 650234ba683b9d82b899c6c51439819787e7609f17a0cc40e0080a7b6443bc38
@@ -914,7 +914,7 @@ F test/fts3conf.test c84bbaec81281c1788aa545ac6e78a6bd6cde2bdbbce2da261690e3659f
 F test/fts3corrupt.test 46b9ddda7f6588fd5a5b1f4bb4fc0618dc45010e7dddb8a3a188baf3197177ae
 F test/fts3corrupt2.test bf55c3fa0b0dc8ea1c0fe5543623bd27714585da6a129038fd6999fe3b0d25f3
 F test/fts3corrupt3.test 0d5b69a0998b4adf868cc301fc78f3d0707745f1d984ce044c205cdb764b491f
-F test/fts3corrupt4.test eff323c4f93b211424d17f01ac6ace8772fbb712b5c9c578192cedd450023c4b
+F test/fts3corrupt4.test 8771f5bad51bf1deb3f8b9564e3ff1e162ca126bcaf7104a81e04fbd15b96f7d
 F test/fts3cov.test cb932743da52a1c79a1ab8983e26c8121cf02263d6ff16e1f642e6f9b8348338
 F test/fts3d.test 2bd8c97bcb9975f2334147173b4872505b6a41359a4f9068960a36afe07a679f
 F test/fts3defer.test f4c20e4c7153d20a98ee49ee5f3faef624fefc9a067f8d8d629db380c4d9f1de
@@ -930,7 +930,7 @@ F test/fts3expr5.test f9abfffbf5e53d48a33e12a1e8f8ba2c551c9b49
 F test/fts3fault.test 9fb7d6266a38806de841f7244bac1b0fe3a1477184bbb10b172d19d2ca6ad692
 F test/fts3fault2.test 6a17a11d8034b1c4eca9f3091649273d56c49ff049e2173df8060f94341e9da0
 F test/fts3first.test dbdedd20914c8d539aa3206c9b34a23775644641
-F test/fts3fuzz001.test 5069b96ca71cc44a223c75725c088e9b6fb3286967048f57063244b53b4d4380
+F test/fts3fuzz001.test e3c7b0ce9b04cc02281dcc96812a277f02df03cd7dc082055d87e11eb18aaf56
 F test/fts3join.test 949b4f5ae3ae9cc2423cb865d711e32476bdb205ab2be923fdf48246e4a44166
 F test/fts3malloc.test b0e4c133b8d61d4f6d112d8110f8320e9e453ef6
 F test/fts3matchinfo.test aa66cc50615578b30f6df9984819ae5b702511cf8a94251ec7c594096a703a4a
@@ -1797,7 +1797,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 666cf8f6b39ae1f72e82b45e9cacba23caf61370ca0c695b3b14452accbb1a0d
-R b4a33c44b98098920d5ea67635d615ee
+P e22d2f905fe840bea51b536ebedc9b637190ea0a37f16559668d99a61e971411
+R 64c1cd3a0456b79f6db2107bcf4df283
 U drh
-Z 91befd19851fb8d3389285e1801b2392
+Z 9aefb36e88b8370b347777351dfba576
index 87284cc96a586dd4523a2c799e692a0366c505f2..f08bf3b8abc6d8ba9d8e9292cba904c2b5c106f4 100644 (file)
@@ -1 +1 @@
-e22d2f905fe840bea51b536ebedc9b637190ea0a37f16559668d99a61e971411
\ No newline at end of file
+10f9e39d6ed2413fa9abc6c82da3ed48f32a42b6190b6219fca7faf850d05113
\ No newline at end of file
index 2c5f410253c62a4c0aabc0c408ee0d2d2c3c6f89..cfe4a7e33f89d69283a2a531de8d4701404a9b90 100644 (file)
@@ -119,15 +119,11 @@ int sqlite3InitCallback(void *pInit, int argc, char **argv, char **NotUsed){
     */
     Index *pIndex;
     pIndex = sqlite3FindIndex(db, argv[0], db->aDb[iDb].zDbSName);
-    if( pIndex==0 ){
-      /* This can occur if there exists an index on a TEMP table which
-      ** has the same name as another index on a permanent index.  Since
-      ** the permanent table is hidden by the TEMP table, we can also
-      ** safely ignore the index on the permanent table.
-      */
-      /* Do Nothing */;
-    }else if( sqlite3GetInt32(argv[1], &pIndex->tnum)==0 ){
-      corruptSchema(pData, argv[0], "invalid rootpage");
+    if( pIndex==0
+     || sqlite3GetInt32(argv[1],&pIndex->tnum)==0
+     || pIndex->tnum<2
+    ){
+      corruptSchema(pData, argv[0], pIndex?"invalid rootpage":"orphan index");
     }
   }
   return 0;
index 0c19b0618028008ebe8c35245b789fd0d70e8dd7..70c7997684b23e8c41940527f0582fad97d71846 100644 (file)
@@ -168,7 +168,7 @@ do_test dbfuzz001-100 {
     |    496: 01 0d 3f 00 00 48 01 54 00 01 f7 01 ec 01 c5 01   ..?..H.T........
     | end c4.db
   }]
-  db eval {PRAGMA integrity_check}
+  db eval {PRAGMA writable_schema=on; PRAGMA integrity_check}
 } {/Fragmentation of 384 bytes reported as 0 on page 8/}
 
 # The DELETE query below deletes the very last cell from page 8.
index 2718aefcf4d3fe0b9b4ca7c52b63b2530c03ed7c..3ff2bed99d29e16daee7ffcf83f610562f55a3e1 100644 (file)
@@ -247,6 +247,6 @@ do_test 5.0 {
 
 do_catchsql_test 5.1 {
   SELECT * FROM t1 WHERE t1 MATCH 'abandon';
-} {1 {database disk image is malformed}}
+} {1 {malformed database schema (sqlite_autoindey_t1_segdir_1) - orphan index}}
 
 finish_test
index aa85eb72ca49e0abae34cee8d03db1218510647b..41b22d33daee8c606d58a0a68c55e93f3fd12c00 100644 (file)
@@ -90,6 +90,7 @@ do_test fts3fuzz001-100 {
 | end c6.db
   }]
   catchsql {
+    PRAGMA writable_schema=on; -- disable schema corruption detection
     INSERT INTO t1(t1) SELECT x FROM t2;
   }
 } {1 {database disk image is malformed}}