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

Avoid a segfault when running vacuum on an in-memory database. Ticket #3620. (CVS 6221)

FossilOrigin-Name: 407830c6839a81fa0a1010940740df3011713a88
This commit is contained in:
danielk1977
2009-01-31 14:54:06 +00:00
parent c531a22377
commit 64beba4338
6 changed files with 29 additions and 22 deletions

View File

@@ -1,5 +1,5 @@
C Fix\sa\sround-off\serror\swhen\smoving\sdates\sby\snegative\smodifier\samounts.\nTicket\s#3618.\s\sEnhance\sthe\s"NNN\syears"\smodifier\sto\saccept\sfractional\nyears.\s(CVS\s6220)
D 2009-01-30T17:27:44
C Avoid\sa\ssegfault\swhen\srunning\svacuum\son\san\sin-memory\sdatabase.\sTicket\s#3620.\s(CVS\s6221)
D 2009-01-31T14:54:07
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
F Makefile.in 3871d308188cefcb7c5ab20da4c7b6aad023bc52
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@@ -103,7 +103,7 @@ F src/attach.c 1c35f95da3c62d19de75b44cfefd12c81c1791b3
F src/auth.c c8b2ab5c8bad4bd90ed7c294694f48269162c627
F src/bitvec.c 44f7059ac1f874d364b34af31b9617e52223ba75
F src/btmutex.c 63c5cc4ad5715690767ffcb741e185d7bc35ec1a
F src/btree.c 606c67b1b544d2324a9e4ab365cedaa1f828c7f4
F src/btree.c dfbbfc396fdd8cbc29754864a97c4df484b78870
F src/btree.h 07359623fa24748709dd61212a32364a6adc6b56
F src/btreeInt.h 44bcbfe387ba99a3a9f2527bd12fa1bb8bc574b3
F src/build.c c8bf5dcef4d5889bc57eecdb8b3dba178e5e06a8
@@ -142,8 +142,8 @@ F src/os_common.h 24525d8b7bce66c374dfc1810a6c9043f3359b60
F src/os_os2.c bed77dc26e3a95ce4a204936b9a1ca6fe612fcc5
F src/os_unix.c c74255cc1fcddc38fc3cc1dcf70c2325d3c2948e
F src/os_win.c ec133f2a3c0da786995ea09ba67056af8f18cc2e
F src/pager.c 3a36360acb9caa54d4fdd6439454348eab3b4b5a
F src/pager.h 59e3b500a0f6a8d17ec61976535007b0de39b9a4
F src/pager.c 72f4e7b3076584889ce6286cd15ff2d985325026
F src/pager.h eccf5cdeebd79006ba7f9577dd30d8179b1430da
F src/parse.y 4f4d16aee0d11f69fec2adb77dac88878043ed8d
F src/pcache.c fcf7738c83c4d3e9d45836b2334c8a368cc41274
F src/pcache.h 9b927ccc5a538e31b4c3bc7eec4f976db42a1324
@@ -636,7 +636,7 @@ F test/types3.test a0f66bf12f80fad89493535474f7a6d16fa58150
F test/unique.test 0253c4227a5dc533e312202ce21ecfad18058d18
F test/update.test 8bc86fd7ef1a00014f76dc6a6a7c974df4aef172
F test/utf16align.test 54cd35a27c005a9b6e7815d887718780b6a462ae
F test/vacuum.test 07eff517a871f08165251860438cf8bbd87d6ed4
F test/vacuum.test 68e39b2228b4b772166debef4a82accf6ddd32f3
F test/vacuum2.test fd87eec0ed72c6cc0809f7867929e2895affed92
F test/vacuum3.test f39ad1428347c5808cd2da7578c470f186a4d0ce
F test/varint.test ab7b110089a08b9926ed7390e7e97bdefeb74102
@@ -693,7 +693,7 @@ F tool/speedtest16.c c8a9c793df96db7e4933f0852abb7a03d48f2e81
F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
P c5dca1146de72071ed2e5fdf6890f41682272587
R 6a74041552de27456797035382a955bb
U drh
Z 4f589fc1347644d84b8da190a4ca5065
P 86be908c5e77ba2b9ac98e394fa987b443d790f8
R 338358bbac17f79c52e09eabfb9a08f6
U danielk1977
Z 69820336f312727069bd2180b04a2b93

View File

@@ -1 +1 @@
86be908c5e77ba2b9ac98e394fa987b443d790f8
407830c6839a81fa0a1010940740df3011713a88

View File

@@ -9,7 +9,7 @@
** May you share freely, never taking more than you give.
**
*************************************************************************
** $Id: btree.c,v 1.562 2009/01/28 20:21:17 drh Exp $
** $Id: btree.c,v 1.563 2009/01/31 14:54:07 danielk1977 Exp $
**
** This file implements a external (disk-based) database using BTrees.
** See the header comment on "btreeInt.h" for additional information.
@@ -7390,6 +7390,10 @@ static int btreeCopyFile(Btree *pTo, Btree *pFrom){
** file APIs on the database file directly.
*/
pBtTo->db = pTo->db;
if( nFromPageSize==nToPageSize ){
sqlite3PagerTruncateImage(pBtTo->pPager, nFromPage);
iNow = iSize;
}
rc = sqlite3PagerCommitPhaseOne(pBtTo->pPager, 0, 1);
if( iSize<iNow && rc==SQLITE_OK ){
rc = sqlite3OsTruncate(pFile, iSize);

View File

@@ -18,7 +18,7 @@
** file simultaneously, or one process from reading the database while
** another is writing.
**
** @(#) $Id: pager.c,v 1.560 2009/01/30 05:40:27 shane Exp $
** @(#) $Id: pager.c,v 1.561 2009/01/31 14:54:07 danielk1977 Exp $
*/
#ifndef SQLITE_OMIT_DISKIO
#include "sqliteInt.h"
@@ -2575,7 +2575,6 @@ static int pager_wait_on_lock(Pager *pPager, int locktype){
return rc;
}
#ifndef SQLITE_OMIT_AUTOVACUUM
/*
** Truncate the in-memory database file image to nPage pages. This
** function does not actually modify the database file on disk. It
@@ -2588,7 +2587,6 @@ void sqlite3PagerTruncateImage(Pager *pPager, Pgno nPage){
assert( pPager->state>=PAGER_RESERVED );
pPager->dbSize = nPage;
}
#endif /* ifndef SQLITE_OMIT_AUTOVACUUM */
/*
** Shutdown the page cache. Free all memory and close all files.

View File

@@ -13,7 +13,7 @@
** subsystem. The page cache subsystem reads and writes a file a page
** at a time and provides a journal for rollback.
**
** @(#) $Id: pager.h,v 1.98 2009/01/24 11:30:43 drh Exp $
** @(#) $Id: pager.h,v 1.99 2009/01/31 14:54:07 danielk1977 Exp $
*/
#ifndef _PAGER_H_
@@ -136,10 +136,8 @@ const char *sqlite3PagerJournalname(Pager*);
int sqlite3PagerNosync(Pager*);
void *sqlite3PagerTempSpace(Pager*);
/* Functions used in auto-vacuum mode to truncate the database file. */
#ifndef SQLITE_OMIT_AUTOVACUUM
void sqlite3PagerTruncateImage(Pager*,Pgno);
#endif
/* Functions used to truncate the database file. */
void sqlite3PagerTruncateImage(Pager*,Pgno);
/* Used by encryption extensions. */
#ifdef SQLITE_HAS_CODEC

View File

@@ -11,7 +11,7 @@
# This file implements regression tests for SQLite library. The
# focus of this file is testing the VACUUM statement.
#
# $Id: vacuum.test,v 1.42 2009/01/22 23:04:47 drh Exp $
# $Id: vacuum.test,v 1.43 2009/01/31 14:54:07 danielk1977 Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
@@ -287,7 +287,14 @@ do_test vacuum-7.0 {
CREATE TABLE t1(t);
VACUUM;
} db2
} {}
execsql {
CREATE TABLE t2(t);
CREATE TABLE t3(t);
DROP TABLE t2;
VACUUM;
pragma integrity_check;
} db2
} {ok}
db2 close
# Ticket #873. VACUUM a database that has ' in its name.