Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / third_party / sqlite / src / test / corruptI.test
blobc8d0176236e9ddafa5d484c425d24f91f5766cfe
1 # 2014-01-20
3 # The author disclaims copyright to this source code.  In place of
4 # a legal notice, here is a blessing:
6 #    May you do good and not evil.
7 #    May you find forgiveness for yourself and forgive others.
8 #    May you share freely, never taking more than you give.
10 #***********************************************************************
13 set testdir [file dirname $argv0]
14 source $testdir/tester.tcl
15 set testprefix corruptI
17 if {[permutation]=="mmap"} {
18   finish_test
19   return
22 # Do not use a codec for tests in this file, as the database file is
23 # manipulated directly using tcl scripts (using the [hexio_write] command).
25 do_not_use_codec
26 database_may_be_corrupt
28 # Initialize the database.
30 do_execsql_test 1.1 {
31   PRAGMA page_size=1024;
32   PRAGMA auto_vacuum=0;
33   CREATE TABLE t1(a);
34   CREATE INDEX i1 ON t1(a);
35   INSERT INTO t1 VALUES('abcdefghijklmnop');
36 } {}
37 db close
39 do_test 1.2 {
40   set offset [hexio_get_int [hexio_read test.db [expr 2*1024 + 8] 2]]
41   set off [expr 2*1024 + $offset + 1]
42   hexio_write test.db $off 7f06
43   sqlite3 db test.db
44   catchsql { SELECT * FROM t1 WHERE a = 10 }
45 } {0 {}}
47 do_test 1.3 {
48   db close
49   set offset [hexio_get_int [hexio_read test.db [expr 2*1024 + 8] 2]]
50   set off [expr 2*1024 + $offset + 1]
51   hexio_write test.db $off FFFF7f02
52   sqlite3 db test.db
53   catchsql { SELECT * FROM t1 WHERE a = 10 }
54 } {1 {database disk image is malformed}}
56 do_test 2.0 {
57   execsql {
58     CREATE TABLE r(x);
59     INSERT INTO r VALUES('ABCDEFGHIJK');
60     CREATE INDEX r1 ON r(x);
61   }
62   set pg [db one {SELECT rootpage FROM sqlite_master WHERE name = 'r1'}]
63 } {5}
65 do_test 2.1 {
66   db close
67   set offset [hexio_get_int [hexio_read test.db [expr (5-1)*1024 + 8] 2]]
68   set off [expr (5-1)*1024 + $offset + 1]
69   hexio_write test.db $off FFFF0004
70   sqlite3 db test.db
71   catchsql { SELECT * FROM r WHERE x >= 10.0 }
72 } {1 {database disk image is malformed}}
74 do_test 2.2 {
75   catchsql { SELECT * FROM r WHERE x >= 10 }
76 } {1 {database disk image is malformed}}
78 if {[db one {SELECT sqlite_compileoption_used('ENABLE_OVERSIZE_CELL_CHECK')}]} {
79   # The following tests only work if OVERSIZE_CELL_CHECK is disabled
80 } else {
81   reset_db
82   do_execsql_test 3.1 {
83      PRAGMA auto_vacuum=0;
84      PRAGMA page_size = 512;
85      CREATE TABLE t1(a INTEGER PRIMARY KEY, b);
86      WITH s(a, b) AS (
87        SELECT 2, 'abcdefghij'
88        UNION ALL
89        SELECT a+2, b FROM s WHERe a < 40
90      )
91      INSERT INTO t1 SELECT * FROM s;
92    } {}
93    
94    do_test 3.2 {
95      hexio_write test.db [expr 512+3] 0054
96      db close
97      sqlite3 db test.db
98      execsql { INSERT INTO t1 VALUES(5, 'klmnopqrst') }
99      execsql { INSERT INTO t1 VALUES(7, 'klmnopqrst') }
100    } {}
101    
102    db close
103    sqlite3 db test.db
104    do_catchsql_test 3.3 {
105      INSERT INTO t1 VALUES(9, 'klmnopqrst');
106    } {1 {database disk image is malformed}}
107 } ;# end-if !defined(ENABLE_OVERSIZE_CELL_CHECK)
108 finish_test