mirror of
https://github.com/sqlite/sqlite.git
synced 2025-11-14 00:22:38 +03:00
Fix a crash that can occur following an OOM fault.
FossilOrigin-Name: 9f80b2687012ab7c4d6d654fe19f40878bd78bd8
This commit is contained in:
@@ -256,6 +256,30 @@ do_execsql_test 4.6 {
|
||||
('34', '68', '102', '136', '170', '204', '238', '272')
|
||||
} {8}
|
||||
|
||||
reset_db
|
||||
do_test 4.7 {
|
||||
execsql {
|
||||
BEGIN;
|
||||
CREATE TABLE t1(o,t INTEGER PRIMARY KEY);
|
||||
CREATE INDEX i1 ON t1(o);
|
||||
}
|
||||
for {set i 0} {$i<10000} {incr i [expr (($i<1000)?1:10)]} {
|
||||
execsql { INSERT INTO t1 VALUES('x', $i) }
|
||||
}
|
||||
execsql {
|
||||
COMMIT;
|
||||
ANALYZE;
|
||||
SELECT count(*) FROM sqlite_stat4;
|
||||
}
|
||||
} {8}
|
||||
do_execsql_test 4.8 {
|
||||
SELECT test_decode(sample) FROM sqlite_stat4;
|
||||
} {
|
||||
{x 211} {x 423} {x 635} {x 847}
|
||||
{x 1590} {x 3710} {x 5830} {x 7950}
|
||||
}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
# The following would cause a crash at one point.
|
||||
#
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
set testdir [file dirname $argv0]
|
||||
source $testdir/tester.tcl
|
||||
source $testdir/malloc_common.tcl
|
||||
set testprefix mallocA
|
||||
|
||||
# Only run these tests if memory debugging is turned on.
|
||||
#
|
||||
@@ -40,7 +41,6 @@ db eval {
|
||||
db close
|
||||
copy_file test.db test.db.bu
|
||||
|
||||
|
||||
do_malloc_test mallocA-1 -testdb test.db.bu -sqlbody {
|
||||
ANALYZE
|
||||
}
|
||||
@@ -53,6 +53,7 @@ do_malloc_test mallocA-1.2 -testdb test.db.bu -sqlbody {
|
||||
do_malloc_test mallocA-1.3 -testdb test.db.bu -sqlbody {
|
||||
ANALYZE main.t1
|
||||
}
|
||||
|
||||
ifcapable reindex {
|
||||
do_malloc_test mallocA-2 -testdb test.db.bu -sqlbody {
|
||||
REINDEX;
|
||||
@@ -68,6 +69,35 @@ ifcapable reindex {
|
||||
}
|
||||
}
|
||||
|
||||
reset_db
|
||||
sqlite3_db_config_lookaside db 0 0 0
|
||||
do_execsql_test 6-prep {
|
||||
CREATE TABLE t1(a, b);
|
||||
CREATE INDEX i1 ON t1(a, b);
|
||||
INSERT INTO t1 VALUES('abc', 'w'); -- rowid=1
|
||||
INSERT INTO t1 VALUES('abc', 'x'); -- rowid=2
|
||||
INSERT INTO t1 VALUES('abc', 'y'); -- rowid=3
|
||||
INSERT INTO t1 VALUES('abc', 'z'); -- rowid=4
|
||||
|
||||
INSERT INTO t1 VALUES('def', 'w'); -- rowid=5
|
||||
INSERT INTO t1 VALUES('def', 'x'); -- rowid=6
|
||||
INSERT INTO t1 VALUES('def', 'y'); -- rowid=7
|
||||
INSERT INTO t1 VALUES('def', 'z'); -- rowid=8
|
||||
|
||||
ANALYZE;
|
||||
}
|
||||
|
||||
do_faultsim_test 6.1 -faults oom* -body {
|
||||
execsql { SELECT rowid FROM t1 WHERE a='abc' AND b='x' }
|
||||
} -test {
|
||||
faultsim_test_result [list 0 2]
|
||||
}
|
||||
do_faultsim_test 6.2 -faults oom* -body {
|
||||
execsql { SELECT rowid FROM t1 WHERE a='abc' AND b<'y' }
|
||||
} -test {
|
||||
faultsim_test_result [list 0 {1 2}]
|
||||
}
|
||||
|
||||
# Ensure that no file descriptors were leaked.
|
||||
do_test malloc-99.X {
|
||||
catch {db close}
|
||||
|
||||
Reference in New Issue
Block a user