]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix an obscure cache corruption that could occur after an SQLITE_FULL error. (CVS...
authordanielk1977 <danielk1977@noemail.net>
Wed, 9 May 2007 15:56:39 +0000 (15:56 +0000)
committerdanielk1977 <danielk1977@noemail.net>
Wed, 9 May 2007 15:56:39 +0000 (15:56 +0000)
FossilOrigin-Name: e8e879aca67dee959bab42627028964c474da72f

manifest
manifest.uuid
src/pager.c
test/sqllimits1.test

index bd32e047c5fd1952d25f1aa6dd304029a1bc0933..fbc3bd34834f1f946693badd44fe03d85eb9cc87 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Add\sfurther\stest\scases\sfor\scompile\stime\slimits.\s(CVS\s3963)
-D 2007-05-09T11:37:23
+C Fix\san\sobscure\scache\scorruption\sthat\scould\soccur\safter\san\sSQLITE_FULL\serror.\s(CVS\s3964)
+D 2007-05-09T15:56:40
 F Makefile.in 87b200ad9970907f76df734d29dff3d294c10935
 F Makefile.linux-gcc 2d8574d1ba75f129aba2019f0b959db380a90935
 F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
@@ -92,7 +92,7 @@ F src/os_unix.c cb1fb044b84870c7b1b8b2902e9d7be779f8b7ce
 F src/os_unix.h 5768d56d28240d3fe4537fac08cc85e4fb52279e
 F src/os_win.c 3b6169038101d06c54b4f04662bfd44b6cf2f289
 F src/os_win.h 41a946bea10f61c158ce8645e7646b29d44f122b
-F src/pager.c 8799ca4265f3c24f5ef0f7a18290caeb6f23633c
+F src/pager.c 42c77875451d04c149a27cea2bd4c917014ace4e
 F src/pager.h 94110a5570dca30d54a883e880a3633b2e4c05ae
 F src/parse.y fe7efcbf0ef1727cb2c08c1a10869b4ac9d5e71d
 F src/pragma.c 0703152b9edd6601eea95e1d474b3bc2962d7920
@@ -340,7 +340,7 @@ F test/shared_err.test cc528f6e78665787e93d9ce3a782a2ce5179d821
 F test/sort.test 0e4456e729e5a92a625907c63dcdedfbe72c5dc5
 F test/speed1.test 22e1b27af0683ed44dcd2f93ed817a9c3e65084a
 F test/speed2.test 53177056baf6556dcbdcf032bbdfc41c1aa74ded
-F test/sqllimits1.test f06a5574698513b3d3e48892b36bc0549ef87295
+F test/sqllimits1.test d5d0047bd2d3f5a50c596cf0800cee223fe32ff9
 F test/subquery.test ae324ee928c5fb463a3ce08a8860d6e7f1ca5797
 F test/subselect.test 974e87f8fc91c5f00dd565316d396a5a6c3106c4
 F test/sync.test d05397b8f89f423dd6dba528692019ab036bc1c3
@@ -486,7 +486,7 @@ F www/tclsqlite.tcl bb0d1357328a42b1993d78573e587c6dcbc964b9
 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
 F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
 F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5
-P 8819617b7cf7ccd64bf6bb4ba208f37126964ec2
-R 54a1b89c49a017368635873118232ab3
+P 9bf2c594a48a4661700f0833562ee2b3ff7b761c
+R e6e433ce97807ce8e1a14237202d778b
 U danielk1977
-Z 4e9b895f8f222ff1332fffb6b3691a1c
+Z 5e57374f56d07a6eac9a76bd05073c8d
index e4dc7baa381569afe0b73a76ae22ecacac0780ff..42a3f4d97af0830936f54b7b4ad579e5e5f70379 100644 (file)
@@ -1 +1 @@
-9bf2c594a48a4661700f0833562ee2b3ff7b761c
\ No newline at end of file
+e8e879aca67dee959bab42627028964c474da72f
\ No newline at end of file
index 288d8cb5bcdb7709771ac36c704f93c9b6fd7ab2..0cc99dcddd132f84b2be1ef99148907f6fc06c50 100644 (file)
@@ -18,7 +18,7 @@
 ** file simultaneously, or one process from reading the database while
 ** another is writing.
 **
-** @(#) $Id: pager.c,v 1.338 2007/05/08 21:45:28 drh Exp $
+** @(#) $Id: pager.c,v 1.339 2007/05/09 15:56:40 danielk1977 Exp $
 */
 #ifndef SQLITE_OMIT_DISKIO
 #include "sqliteInt.h"
@@ -3077,6 +3077,7 @@ int sqlite3PagerAcquire(
     */
     if( nMax<(int)pgno || MEMDB || (noContent && !pPager->alwaysRollback) ){
       if( pgno>pPager->mxPgno ){
+        sqlite3PagerUnref(pPg);
         return SQLITE_FULL;
       }
       memset(PGHDR_TO_DATA(pPg), 0, pPager->pageSize);
index 7cba40dd35bf31d57dcab294cbaf7b90f6064760..0dcbaa121fac07627447fbc2fc5866c8c5eb57eb 100644 (file)
@@ -12,7 +12,7 @@
 # This file contains tests to verify that the limits defined in
 # sqlite source file limits.h are enforced.
 #
-# $Id: sqllimits1.test,v 1.5 2007/05/09 11:37:23 danielk1977 Exp $
+# $Id: sqllimits1.test,v 1.6 2007/05/09 15:56:40 danielk1977 Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
@@ -157,7 +157,6 @@ do_test sqllimits1-3.6 {
   }
 } {0 7}
 
-
 #--------------------------------------------------------------------
 # Test cases sqllimits1-4.* test the SQLITE_MAX_COLUMN limit.
 #
@@ -243,6 +242,20 @@ do_test sqllimits-1.4.9 {
 # the expression.
 #
 # TODO
+do_test sqllimits-1.5.1 {
+  execsql {
+    PRAGMA max_page_count = 1000000;  -- 1 GB
+    CREATE TABLE v0(a);
+  }
+  db transaction {
+    for {set i 1} {$i < 2000} {incr i} {
+      set expr "([string repeat {a AND } 50]a AND a) AS a"
+      execsql [subst {
+        CREATE VIEW v${i} AS SELECT $expr FROM v0
+      }]
+    }
+  }
+} {}
 
 #--------------------------------------------------------------------
 # Test cases sqllimits-6.* test that the SQLITE_MAX_VDBE_OP