1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-08-10 01:02:56 +03:00

Fix an obscure cache corruption that could occur after an SQLITE_FULL error. (CVS 3964)

FossilOrigin-Name: e8e879aca67dee959bab42627028964c474da72f
This commit is contained in:
danielk1977
2007-05-09 15:56:39 +00:00
parent 832b2664e6
commit de3bea7ba4
4 changed files with 25 additions and 11 deletions

View File

@@ -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

View File

@@ -1 +1 @@
9bf2c594a48a4661700f0833562ee2b3ff7b761c
e8e879aca67dee959bab42627028964c474da72f

View 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);

View 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