From: drh Date: Thu, 10 Jan 2019 14:33:15 +0000 (+0000) Subject: More aggressive early detection of orphaned and malformed autoindexes when X-Git-Tag: version-3.27.0~187 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=69ab18d2132720f793f9afd84528f450fce1c874;p=thirdparty%2Fsqlite.git More aggressive early detection of orphaned and malformed autoindexes when parsing the schema. FossilOrigin-Name: 10f9e39d6ed2413fa9abc6c82da3ed48f32a42b6190b6219fca7faf850d05113 --- diff --git a/manifest b/manifest index 5fb74c2faa..86c77ee269 100644 --- 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 diff --git a/manifest.uuid b/manifest.uuid index 87284cc96a..f08bf3b8ab 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -e22d2f905fe840bea51b536ebedc9b637190ea0a37f16559668d99a61e971411 \ No newline at end of file +10f9e39d6ed2413fa9abc6c82da3ed48f32a42b6190b6219fca7faf850d05113 \ No newline at end of file diff --git a/src/prepare.c b/src/prepare.c index 2c5f410253..cfe4a7e33f 100644 --- a/src/prepare.c +++ b/src/prepare.c @@ -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; diff --git a/test/dbfuzz001.test b/test/dbfuzz001.test index 0c19b06180..70c7997684 100644 --- a/test/dbfuzz001.test +++ b/test/dbfuzz001.test @@ -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. diff --git a/test/fts3corrupt4.test b/test/fts3corrupt4.test index 2718aefcf4..3ff2bed99d 100644 --- a/test/fts3corrupt4.test +++ b/test/fts3corrupt4.test @@ -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 diff --git a/test/fts3fuzz001.test b/test/fts3fuzz001.test index aa85eb72ca..41b22d33da 100644 --- a/test/fts3fuzz001.test +++ b/test/fts3fuzz001.test @@ -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}}