From: drh Date: Sun, 20 Feb 2011 03:40:59 +0000 (+0000) Subject: Do not report the database corruption if the the db size header field is X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f4ae60eb7a042fc3b8a29742be80a3d98740a7fd;p=thirdparty%2Fsqlite.git Do not report the database corruption if the the db size header field is greater than the file size on disk unless the two change-counter header fields are identical. Fix for ticket [89b8c9ac54]. Backport by cherrypick of [00c4596f0b270]. FossilOrigin-Name: e2616004dfaf61d776e448693971b6478552a635 --- diff --git a/manifest b/manifest index aabe5693ce..8a76bc2768 100644 --- a/manifest +++ b/manifest @@ -1,8 +1,8 @@ -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 -C Make\ssure\sthe\schange-counter\sand\sSQLite-version\sfields\sof\sthe\sheader\sare\nset\scorrectly\seven\safter\svacuuming.\s\sThis\sis\sa\sbackport\sof\schanges\n[0be92a7576]\sand\s[04fa1e1690]\sto\saddress\sticket\s[5de63f876cc]. -D 2011-02-20T03:32:54.731 +C Do\snot\sreport\sthe\sdatabase\scorruption\sif\sthe\sthe\sdb\ssize\sheader\sfield\sis\s\ngreater\sthan\sthe\sfile\ssize\son\sdisk\sunless\sthe\stwo\schange-counter\sheader\nfields\sare\sidentical.\s\sFix\sfor\sticket\s[89b8c9ac54].\s\sBackport\sby\scherrypick\nof\s[00c4596f0b270]. +D 2011-02-20T03:40:59.226 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 4547616ad2286053af6ccccefa242dc925e49bf0 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -122,7 +122,7 @@ F src/auth.c 523da7fb4979469955d822ff9298352d6b31de34 F src/backup.c d5b0137bc20327af08c14772227cc35134839c30 F src/bitvec.c af50f1c8c0ff54d6bdb7a80e2fceca5a93670bef F src/btmutex.c 96a12f50f7a17475155971a241d85ec5171573ff -F src/btree.c a27c3b41082889fc258278ba501ff2594dda2a41 +F src/btree.c 9fd4438357ede1e67229cce75336f364e1ca58c9 F src/btree.h 10f9296bf4edf034f5adce921b7b4383a56a1c90 F src/btreeInt.h c424f2f131cc61ddf130f9bd736b3df12c8a51f0 F src/build.c 00a327120d81ace6267e714ae8010c997d55de5d @@ -381,7 +381,7 @@ F test/exec.test e949714dc127eaa5ecc7d723efec1ec27118fdd7 F test/expr.test 620a636cf7b7d4e5834a0b9d83a4da372e24a7b7 F test/fallocate.test 43dc34b8c24be6baffadc3b4401ee15710ce83c6 F test/filectrl.test 97003734290887566e01dded09dc9e99cb937e9e -F test/filefmt.test f77c92141960b7933bc6691631d2ad62257ef40a +F test/filefmt.test f178cfc29501a14565954c961b226e61877dd32c F test/fkey1.test 01c7de578e11747e720c2d9aeef27f239853c4da F test/fkey2.test e028cd80aa0bd38541c99214e3ba2dfccadffe6f F test/fkey3.test 42f88d6048d8dc079e2a8cf7baad1cc1483a7620 @@ -897,14 +897,14 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f -P 7701b07759d63537408a68bac85cb1b8b27160b7 -R 1af9cda1d47f108dd79a57e892ab3d60 +P 442be1358e7dff17548718c0c7c031ec320d135d +R fb59a5fc0a5e3e6fb0952242e7338186 U drh -Z d17b6d73dc0e258c19674947beb8c07b +Z b5b010b64c2aa9bb6b609fd60a9d673c -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) -iD8DBQFNYItqoxKgR168RlERAkvGAJ456/IGVD5IaXa+SVUvWNJiAFQjWwCdEmc5 -sY0984PvfU6Cksq4hCEZCN0= -=PbW4 +iD8DBQFNYI1OoxKgR168RlERAgtNAJ9Ud7Oa/GOufsGai8aQQiHsv4t1TwCePLOJ +P+9Qab9sXXe3r9JTQY9/ues= +=z4yR -----END PGP SIGNATURE----- diff --git a/manifest.uuid b/manifest.uuid index 0a7ea22276..9caa82de01 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -442be1358e7dff17548718c0c7c031ec320d135d \ No newline at end of file +e2616004dfaf61d776e448693971b6478552a635 \ No newline at end of file diff --git a/src/btree.c b/src/btree.c index bec19e315f..b79c15c88d 100644 --- a/src/btree.c +++ b/src/btree.c @@ -2386,7 +2386,7 @@ static int lockBtree(BtShared *pBt){ pageSize-usableSize); return rc; } - if( (pBt->db->flags & SQLITE_RecoveryMode)==0 && nPageHeader>nPageFile ){ + if( (pBt->db->flags & SQLITE_RecoveryMode)==0 && nPage>nPageFile ){ rc = SQLITE_CORRUPT_BKPT; goto page1_init_failed; } diff --git a/test/filefmt.test b/test/filefmt.test index 16b459630c..72edbeebc7 100644 --- a/test/filefmt.test +++ b/test/filefmt.test @@ -193,4 +193,24 @@ db close sqlite3 db test.db integrity_check filefmt-2.2.7 +#-------------------------------------------------------------------------- +# Check that ticket 89b8c9ac54 is fixed. Before the fix, the SELECT +# statement would return SQLITE_CORRUPT. The database file was not actually +# corrupted, but SQLite was reporting that it was. +# +db close +forcedelete test.db +sqlite3 db test.db +do_execsql_test filefmt-3.1 { + PRAGMA auto_vacuum = 1; + CREATE TABLE t1(a, b); +} {} +do_test filefmt-3.2 { + sql36231 { DROP TABLE t1 } +} {} +do_execsql_test filefmt-3.3 { + SELECT * FROM sqlite_master; + PRAGMA integrity_check; +} {ok} + finish_test