diff --git a/manifest b/manifest index 16fd760460..29a151d7fc 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Version\s3.2.4\s(CVS\s2619) -D 2005-08-24T11:14:47 +C Fix\sa\sbug\sin\sDELETE\sthat\smight\scause\sa\ssegfault\swhen\sdeleting\smore\nthan\s40940\srows\sof\sdata\sall\sat\sonce.\s(CVS\s2620) +D 2005-08-24T16:13:52 F Makefile.in b109ddb46a5550d0732dcd6caca01c123f6d5cdd F Makefile.linux-gcc 06be33b2a9ad4f005a5f42b22c4a19dab3cbb5c7 F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028 @@ -85,7 +85,7 @@ F src/vdbe.h 3b29a9af6c7a64ed692bef1fc5f61338f40d2f67 F src/vdbeInt.h 9be9a6c43d38124bd03cc5cf05715605b1789fd9 F src/vdbeapi.c 7790e9f8da2dde29510a196d1e41ff53da7eb8a8 F src/vdbeaux.c 874624698fad54a59c6a0bcccea9d5aaa8655ab6 -F src/vdbefifo.c b8805850afe13b43f1de78d58088cb5d66f88e1e +F src/vdbefifo.c 9efb94c8c3f4c979ebd0028219483f88e57584f5 F src/vdbemem.c 4732fd4d1a75dc38549493d7f9a81d02bf7c59b5 F src/where.c 485041aa51fb33f43b346e018f7c01422847f364 F tclinstaller.tcl 046e3624671962dc50f0481d7c25b38ef803eb42 @@ -138,6 +138,7 @@ F test/date.test 30ca15e608a45d868fd419c901795382efe27020 F test/default.test 252298e42a680146b1dd64f563b95bdf088d94fb F test/delete.test 33e1670049364fc3604217a6c2eda042a47115ab F test/delete2.test e382b6a97787197eb8b93dd4ccd37797c3725ea3 +F test/delete3.test 555e84a00a99230b7d049d477a324a631126a6ab F test/diskfull.test ba27afd587af1216f92d2bb00132cbc0e39354fc F test/enc.test 7a03417a1051fe8bc6c7641cf4c8c3f7e0066d52 F test/enc2.test d1ab077b84f4d3099246915422b1ab6b81481e0a @@ -297,7 +298,7 @@ F www/tclsqlite.tcl 3df553505b6efcad08f91e9b975deb2e6c9bb955 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0 F www/version3.tcl a99cf5f6d8bd4d5537584a2b342f0fb9fa601d8b F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513 -P 139a28d231875e72538fd6842168c458441ad1d0 -R 2f6c9b894551e0a3c64b6097033bd8f9 +P 8cef2c1ae728970a38d794f9903115da5d0fcd55 +R a70653770f548ef58ecb2d4303ec79dd U drh -Z fbfbdff77016e0ef0591035e80b41a64 +Z 4fc4e011eef56b244e6411516a20c5a0 diff --git a/manifest.uuid b/manifest.uuid index f6979459da..13623ac161 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -8cef2c1ae728970a38d794f9903115da5d0fcd55 \ No newline at end of file +7c599bae33ba4eb10fc486ae3dab76330ce69936 \ No newline at end of file diff --git a/src/vdbefifo.c b/src/vdbefifo.c index e752e16698..7ea6c050f9 100644 --- a/src/vdbefifo.c +++ b/src/vdbefifo.c @@ -21,6 +21,9 @@ */ static FifoPage *allocatePage(int nEntry){ FifoPage *pPage; + if( nEntry>32767 ){ + nEntry = 32767; + } pPage = sqliteMallocRaw( sizeof(FifoPage) + sizeof(i64)*(nEntry-1) ); if( pPage ){ pPage->nSlot = nEntry; @@ -77,7 +80,9 @@ int sqlite3VdbeFifoPop(Fifo *pFifo, i64 *pVal){ pPage = pFifo->pFirst; assert( pPage!=0 ); assert( pPage->iWrite>pPage->iRead ); + assert( pPage->iWrite<=pPage->nSlot ); assert( pPage->iReadnSlot ); + assert( pPage->iRead>=0 ); *pVal = pPage->aSlot[pPage->iRead++]; pFifo->nEntry--; if( pPage->iRead>=pPage->iWrite ){ diff --git a/test/delete3.test b/test/delete3.test new file mode 100644 index 0000000000..a31f6ec39e --- /dev/null +++ b/test/delete3.test @@ -0,0 +1,57 @@ +# 2005 August 24 +# +# The author disclaims copyright to this source code. In place of +# a legal notice, here is a blessing: +# +# May you do good and not evil. +# May you find forgiveness for yourself and forgive others. +# May you share freely, never taking more than you give. +# +#*********************************************************************** +# This file implements regression tests for SQLite library. The +# focus of this script is a test of the DELETE command where a +# large number of rows are deleted. +# + +set testdir [file dirname $argv0] +source $testdir/tester.tcl + +# Create a table that contains a large number of rows. +# +do_test delete3-1.1 { + execsql { + CREATE TABLE t1(x integer primary key); + BEGIN; + INSERT INTO t1 VALUES(1); + INSERT INTO t1 VALUES(2); + INSERT INTO t1 SELECT x+2 FROM t1; + INSERT INTO t1 SELECT x+4 FROM t1; + INSERT INTO t1 SELECT x+8 FROM t1; + INSERT INTO t1 SELECT x+16 FROM t1; + INSERT INTO t1 SELECT x+32 FROM t1; + INSERT INTO t1 SELECT x+64 FROM t1; + INSERT INTO t1 SELECT x+128 FROM t1; + INSERT INTO t1 SELECT x+256 FROM t1; + INSERT INTO t1 SELECT x+512 FROM t1; + INSERT INTO t1 SELECT x+1024 FROM t1; + INSERT INTO t1 SELECT x+2048 FROM t1; + INSERT INTO t1 SELECT x+4096 FROM t1; + INSERT INTO t1 SELECT x+8192 FROM t1; + INSERT INTO t1 SELECT x+16384 FROM t1; + INSERT INTO t1 SELECT x+32768 FROM t1; + INSERT INTO t1 SELECT x+65536 FROM t1; + INSERT INTO t1 SELECT x+131072 FROM t1; + INSERT INTO t1 SELECT x+262144 FROM t1; + COMMIT; + SELECT count(*) FROM t1; + } +} {524288} +do_test delete3-1.2 { + execsql { + DELETE FROM t1 WHERE x%2==0; + SELECT count(*) FROM t1; + } +} {262144} +integrity_check delete3-1.3 + +finish_test