xref: /sqlite-3.40.0/test/corruptM.test (revision f0578823)
1c5a93d4cSdrh# 2019-08-12
2c5a93d4cSdrh#
3c5a93d4cSdrh# The author disclaims copyright to this source code.  In place of
4c5a93d4cSdrh# a legal notice, here is a blessing:
5c5a93d4cSdrh#
6c5a93d4cSdrh#    May you do good and not evil.
7c5a93d4cSdrh#    May you find forgiveness for yourself and forgive others.
8c5a93d4cSdrh#    May you share freely, never taking more than you give.
9c5a93d4cSdrh#
10c5a93d4cSdrh#***********************************************************************
11c5a93d4cSdrh#
12c5a93d4cSdrh# Check to ensure that the type, name, and tbl_name fields of the
13c5a93d4cSdrh# sqlite_master table are validated and errors are reported if they
14c5a93d4cSdrh# are inconsistent with the sql.
15c5a93d4cSdrh#
16c5a93d4cSdrh
17c5a93d4cSdrhset testdir [file dirname $argv0]
18c5a93d4cSdrhsource $testdir/tester.tcl
19c5a93d4cSdrhset testprefix corruptM
20c5a93d4cSdrh
21c5a93d4cSdrh# These tests deal with corrupt database files
22c5a93d4cSdrh#
23c5a93d4cSdrhdatabase_may_be_corrupt
24c5a93d4cSdrh
25*f0578823Sdanproc open_db2_and_catchsql {sql} {
26*f0578823Sdan  set rc [catch { sqlite3 db2 test.db } msg]
27*f0578823Sdan  if {$rc} {
28*f0578823Sdan    return [list $rc $msg]
29*f0578823Sdan  }
30*f0578823Sdan  set res [catchsql $sql db2]
31*f0578823Sdan  db2 close
32*f0578823Sdan  set res
33*f0578823Sdan}
34*f0578823Sdan
35c5a93d4cSdrhdb close
36c5a93d4cSdrhforcedelete test.db
37c5a93d4cSdrhsqlite3 db test.db
38c5a93d4cSdrhdo_execsql_test corruptM-100 {
39c5a93d4cSdrh  CREATE TABLE t1(a,b,c);
40c5a93d4cSdrh  INSERT INTO t1 VALUES(111,222,333);
41c5a93d4cSdrh  CREATE INDEX i1 ON t1(b);
42c5a93d4cSdrh  CREATE VIEW v2 AS SELECT 15,22;
43c5a93d4cSdrh  CREATE TRIGGER r1 AFTER INSERT ON t1 BEGIN SELECT 5; END;
44c5a93d4cSdrh  SELECT type, name, tbl_name, '|' FROM sqlite_master;
45c5a93d4cSdrh} {table t1 t1 | index i1 t1 | view v2 v2 | trigger r1 t1 |}
46c5a93d4cSdrhdo_execsql_test corruptM-101 {
47c5a93d4cSdrh  PRAGMA writable_schema=on;
48c5a93d4cSdrh  UPDATE sqlite_master SET tbl_name=NULL WHERE name='t1';
49c5a93d4cSdrh  SELECT type, name, tbl_name, '|' FROM sqlite_master;
50c5a93d4cSdrh} {table t1 {} | index i1 t1 | view v2 v2 | trigger r1 t1 |}
51c5a93d4cSdrhdo_test corruptM-102 {
52*f0578823Sdan  open_db2_and_catchsql {
53c5a93d4cSdrh    PRAGMA quick_check;
54*f0578823Sdan  }
55c5a93d4cSdrh} {1 {malformed database schema (t1)}}
56c5a93d4cSdrh
57c5a93d4cSdrhdo_execsql_test corruptM-110 {
58c5a93d4cSdrh  UPDATE sqlite_master SET tbl_name='tx' WHERE name='t1';
59c5a93d4cSdrh  SELECT type, name, tbl_name, '|' FROM sqlite_master;
60c5a93d4cSdrh} {table t1 tx | index i1 t1 | view v2 v2 | trigger r1 t1 |}
61c5a93d4cSdrhdo_test corruptM-111 {
62*f0578823Sdan  open_db2_and_catchsql {
63c5a93d4cSdrh    PRAGMA quick_check;
64*f0578823Sdan  }
65c5a93d4cSdrh} {1 {malformed database schema (t1)}}
66c5a93d4cSdrhdo_execsql_test corruptM-112 {
67c5a93d4cSdrh  UPDATE sqlite_master SET tbl_name='t1', type='tabl' WHERE name='t1';
68c5a93d4cSdrh  SELECT type, name, tbl_name, '|' FROM sqlite_master;
69c5a93d4cSdrh} {tabl t1 t1 | index i1 t1 | view v2 v2 | trigger r1 t1 |}
70c5a93d4cSdrhdo_test corruptM-113 {
71*f0578823Sdan  open_db2_and_catchsql {
72c5a93d4cSdrh    PRAGMA quick_check;
73*f0578823Sdan  }
74c5a93d4cSdrh} {1 {malformed database schema (t1)}}
75c5a93d4cSdrhdo_execsql_test corruptM-114 {
76c5a93d4cSdrh  UPDATE sqlite_master SET tbl_name='t9',type='table',name='t9'WHERE name='t1';
77c5a93d4cSdrh  SELECT type, name, tbl_name, '|' FROM sqlite_master;
78c5a93d4cSdrh} {table t9 t9 | index i1 t1 | view v2 v2 | trigger r1 t1 |}
79c5a93d4cSdrhdo_test corruptM-114 {
80*f0578823Sdan  open_db2_and_catchsql {
81c5a93d4cSdrh    PRAGMA quick_check;
82*f0578823Sdan  }
83c5a93d4cSdrh} {1 {malformed database schema (t9)}}
84c5a93d4cSdrh
85c5a93d4cSdrhdo_execsql_test corruptM-120 {
86c5a93d4cSdrh  UPDATE sqlite_master SET name='t1',tbl_name='T1' WHERE name='t9';
87c5a93d4cSdrh  SELECT type, name, tbl_name, '|' FROM sqlite_master;
88c5a93d4cSdrh} {table t1 T1 | index i1 t1 | view v2 v2 | trigger r1 t1 |}
89c5a93d4cSdrhdo_test corruptM-121 {
90*f0578823Sdan  open_db2_and_catchsql {
91c5a93d4cSdrh    PRAGMA quick_check;
92c5a93d4cSdrh    SELECT * FROM t1, v2;
93*f0578823Sdan  }
94c5a93d4cSdrh} {0 {ok 111 222 333 15 22}}
95c5a93d4cSdrh
96c5a93d4cSdrhdo_execsql_test corruptM-130 {
97c5a93d4cSdrh  UPDATE sqlite_master SET type='view' WHERE name='t1';
98c5a93d4cSdrh  SELECT type, name, tbl_name, '|' FROM sqlite_master;
99c5a93d4cSdrh} {view t1 T1 | index i1 t1 | view v2 v2 | trigger r1 t1 |}
100c5a93d4cSdrhdo_test corruptM-131 {
101*f0578823Sdan  open_db2_and_catchsql {
102c5a93d4cSdrh    PRAGMA quick_check;
103c5a93d4cSdrh    SELECT * FROM t1, v2;
104*f0578823Sdan  }
105c5a93d4cSdrh} {1 {malformed database schema (t1)}}
106c5a93d4cSdrh
107c5a93d4cSdrhdo_execsql_test corruptM-140 {
108c5a93d4cSdrh  UPDATE sqlite_master SET type='table', tbl_name='t1' WHERE name='t1';
109c5a93d4cSdrh  UPDATE sqlite_master SET tbl_name='tx' WHERE name='i1';
110c5a93d4cSdrh  SELECT type, name, tbl_name, '|' FROM sqlite_master;
111c5a93d4cSdrh} {table t1 t1 | index i1 tx | view v2 v2 | trigger r1 t1 |}
112c5a93d4cSdrhdo_test corruptM-141 {
113*f0578823Sdan  open_db2_and_catchsql {
114c5a93d4cSdrh    PRAGMA quick_check;
115c5a93d4cSdrh    SELECT * FROM t1, v2;
116*f0578823Sdan  }
117c5a93d4cSdrh} {1 {malformed database schema (i1)}}
118c5a93d4cSdrh
119c5a93d4cSdrhdo_execsql_test corruptM-150 {
120c5a93d4cSdrh  UPDATE sqlite_master SET type='table', tbl_name='t1' WHERE name='i1';
121c5a93d4cSdrh  SELECT type, name, tbl_name, '|' FROM sqlite_master;
122c5a93d4cSdrh} {table t1 t1 | table i1 t1 | view v2 v2 | trigger r1 t1 |}
123c5a93d4cSdrhdo_test corruptM-151 {
124*f0578823Sdan  open_db2_and_catchsql {
125c5a93d4cSdrh    PRAGMA quick_check;
126c5a93d4cSdrh    SELECT * FROM t1, v2;
127*f0578823Sdan  }
128c5a93d4cSdrh} {1 {malformed database schema (i1)}}
129c5a93d4cSdrh
130c5a93d4cSdrhdo_execsql_test corruptM-160 {
131c5a93d4cSdrh  UPDATE sqlite_master SET type='view', tbl_name='t1' WHERE name='i1';
132c5a93d4cSdrh  SELECT type, name, tbl_name, '|' FROM sqlite_master;
133c5a93d4cSdrh} {table t1 t1 | view i1 t1 | view v2 v2 | trigger r1 t1 |}
134c5a93d4cSdrhdo_test corruptM-161 {
135*f0578823Sdan  open_db2_and_catchsql {
136c5a93d4cSdrh    PRAGMA quick_check;
137c5a93d4cSdrh    SELECT * FROM t1, v2;
138*f0578823Sdan  }
139c5a93d4cSdrh} {1 {malformed database schema (i1)}}
140c5a93d4cSdrh
141c5a93d4cSdrhdo_execsql_test corruptM-170 {
142c5a93d4cSdrh  UPDATE sqlite_master SET type='index', tbl_name='t1' WHERE name='i1';
143c5a93d4cSdrh  UPDATE sqlite_master SET type='table', tbl_name='v2' WHERE name='v2';
144c5a93d4cSdrh  SELECT type, name, tbl_name, '|' FROM sqlite_master;
145c5a93d4cSdrh} {table t1 t1 | index i1 t1 | table v2 v2 | trigger r1 t1 |}
146c5a93d4cSdrhdo_test corruptM-171 {
147*f0578823Sdan  open_db2_and_catchsql {
148c5a93d4cSdrh    PRAGMA quick_check;
149c5a93d4cSdrh    SELECT * FROM t1, v2;
150*f0578823Sdan  }
151c5a93d4cSdrh} {1 {malformed database schema (v2)}}
152c5a93d4cSdrh
153c5a93d4cSdrhdo_execsql_test corruptM-180 {
154c5a93d4cSdrh  UPDATE sqlite_master SET type='view',name='v3',tbl_name='v3' WHERE name='v2';
155c5a93d4cSdrh  SELECT type, name, tbl_name, '|' FROM sqlite_master;
156c5a93d4cSdrh} {table t1 t1 | index i1 t1 | view v3 v3 | trigger r1 t1 |}
157c5a93d4cSdrhdo_test corruptM-181 {
158*f0578823Sdan  open_db2_and_catchsql {
159c5a93d4cSdrh    PRAGMA quick_check;
160c5a93d4cSdrh    SELECT * FROM t1, v2;
161*f0578823Sdan  }
162c5a93d4cSdrh} {1 {malformed database schema (v3)}}
163c5a93d4cSdrh
164c5a93d4cSdrhdo_execsql_test corruptM-190 {
165c5a93d4cSdrh  UPDATE sqlite_master SET type='view',name='v2',tbl_name='v2' WHERE name='v3';
166c5a93d4cSdrh  UPDATE sqlite_master SET type='view' WHERE name='r1';
167c5a93d4cSdrh  SELECT type, name, tbl_name, '|' FROM sqlite_master;
168c5a93d4cSdrh} {table t1 t1 | index i1 t1 | view v2 v2 | view r1 t1 |}
169c5a93d4cSdrhdo_test corruptM-191 {
170*f0578823Sdan  open_db2_and_catchsql {
171c5a93d4cSdrh    PRAGMA quick_check;
172c5a93d4cSdrh    SELECT * FROM t1, v2;
173*f0578823Sdan  }
174c5a93d4cSdrh} {1 {malformed database schema (r1)}}
175c5a93d4cSdrhdo_execsql_test corruptM-192 {
176c5a93d4cSdrh  UPDATE sqlite_master SET type='trigger',tbl_name='v2' WHERE name='r1';
177c5a93d4cSdrh  SELECT type, name, tbl_name, '|' FROM sqlite_master;
178c5a93d4cSdrh} {table t1 t1 | index i1 t1 | view v2 v2 | trigger r1 v2 |}
179c5a93d4cSdrhdo_test corruptM-193 {
180*f0578823Sdan  open_db2_and_catchsql {
181c5a93d4cSdrh    PRAGMA quick_check;
182c5a93d4cSdrh    SELECT * FROM t1, v2;
183*f0578823Sdan  }
184c5a93d4cSdrh} {1 {malformed database schema (r1)}}
185c5a93d4cSdrh
186c5a93d4cSdrhfinish_test
187