xref: /sqlite-3.40.0/test/fuzzerfault.test (revision a3944bc4)
14965ebceSdan# 2012 February 21
24965ebceSdan#
34965ebceSdan# The author disclaims copyright to this source code.  In place of
44965ebceSdan# a legal notice, here is a blessing:
54965ebceSdan#
64965ebceSdan#    May you do good and not evil.
74965ebceSdan#    May you find forgiveness for yourself and forgive others.
84965ebceSdan#    May you share freely, never taking more than you give.
94965ebceSdan#
104965ebceSdan#***********************************************************************
114965ebceSdan# This file implements regression tests for TCL interface to the
124965ebceSdan# SQLite library.
134965ebceSdan#
144965ebceSdan
154965ebceSdanset testdir [file dirname $argv0]
164965ebceSdansource $testdir/tester.tcl
174965ebceSdanifcapable !vtab { finish_test ; return }
184965ebceSdanset ::testprefix fuzzerfault
194965ebceSdan
20e50db1c5Sdrhload_static_extension db fuzzer
214965ebceSdan
224965ebceSdando_test 1-pre1 {
234965ebceSdan  execsql {
244965ebceSdan    CREATE TABLE x1_rules(ruleset, cFrom, cTo, cost);
254965ebceSdan    INSERT INTO x1_rules VALUES(0, 'a', 'b', 1);
264965ebceSdan    INSERT INTO x1_rules VALUES(0, 'a', 'c', 2);
274965ebceSdan    INSERT INTO x1_rules VALUES(0, 'a', 'd', 3);
284965ebceSdan  }
294965ebceSdan  faultsim_save_and_close
304965ebceSdan} {}
3199c7d468Sdando_faultsim_test 1 -prep {
324965ebceSdan  faultsim_restore_and_reopen
334eb9b721Smistachkin  load_static_extension db fuzzer
344965ebceSdan} -body {
354965ebceSdan  execsql {
364965ebceSdan    CREATE VIRTUAL TABLE x1 USING fuzzer(x1_rules);
374965ebceSdan    SELECT word FROM x1 WHERE word MATCH 'xax';
384965ebceSdan  }
394965ebceSdan} -test {
404965ebceSdan  faultsim_test_result {0 {xax xbx xcx xdx}}               \
414965ebceSdan                       {1 {vtable constructor failed: x1}}
424965ebceSdan}
434965ebceSdan
4499c7d468Sdando_test 2-pre1 {
4599c7d468Sdan  faultsim_delete_and_reopen
464eb9b721Smistachkin  load_static_extension db fuzzer
4799c7d468Sdan  execsql {
4899c7d468Sdan    CREATE TABLE x2_rules(ruleset, cFrom, cTo, cost);
4999c7d468Sdan    INSERT INTO x2_rules VALUES(0, 'a', 'x', 1);
5099c7d468Sdan    INSERT INTO x2_rules VALUES(0, 'b', 'x', 2);
5199c7d468Sdan    INSERT INTO x2_rules VALUES(0, 'c', 'x', 3);
5299c7d468Sdan    CREATE VIRTUAL TABLE x2 USING fuzzer(x2_rules);
5399c7d468Sdan  }
5499c7d468Sdan  faultsim_save_and_close
5599c7d468Sdan} {}
5699c7d468Sdan
5799c7d468Sdando_faultsim_test 2 -prep {
5899c7d468Sdan  faultsim_restore_and_reopen
594eb9b721Smistachkin  load_static_extension db fuzzer
6099c7d468Sdan} -body {
6199c7d468Sdan  execsql {
6299c7d468Sdan    SELECT count(*) FROM x2 WHERE word MATCH 'abc';
6399c7d468Sdan  }
6499c7d468Sdan} -test {
6599c7d468Sdan  faultsim_test_result {0 8} {1 {vtable constructor failed: x2}}
6699c7d468Sdan}
6799c7d468Sdan
6899c7d468Sdando_test 3-pre1 {
6999c7d468Sdan  faultsim_delete_and_reopen
7099c7d468Sdan  execsql {
7199c7d468Sdan    CREATE TABLE x1_rules(ruleset, cFrom, cTo, cost);
7299c7d468Sdan    INSERT INTO x1_rules VALUES(0, 'a',
7399c7d468Sdan      '123456789012345678901234567890a1234567890123456789', 10
7499c7d468Sdan    );
7599c7d468Sdan  }
7699c7d468Sdan  faultsim_save_and_close
7799c7d468Sdan} {}
7899c7d468Sdan
7999c7d468Sdando_faultsim_test 3 -prep {
8099c7d468Sdan  faultsim_restore_and_reopen
814eb9b721Smistachkin  load_static_extension db fuzzer
8299c7d468Sdan} -body {
8399c7d468Sdan  execsql {
8499c7d468Sdan    CREATE VIRTUAL TABLE x1 USING fuzzer(x1_rules);
8599c7d468Sdan    SELECT count(*) FROM (SELECT * FROM x1 WHERE word MATCH 'a' LIMIT 2);
8699c7d468Sdan  }
8799c7d468Sdan} -test {
8899c7d468Sdan  faultsim_test_result {0 2} {1 {vtable constructor failed: x1}}
8999c7d468Sdan}
904965ebceSdan
91*a3944bc4Sdan#-------------------------------------------------------------------------
92*a3944bc4Sdanreset_db
93*a3944bc4Sdando_execsql_test 4.0 {
94*a3944bc4Sdan  CREATE TABLE t1_a(a INTEFDR PRIMARY KEY, b TEXT);
95*a3944bc4Sdan  CREATE TABLE t3_a(k FnTEGER PRIMARY KEY, v TEXT);
96*a3944bc4Sdan  CREATE TABLE t3_b(k INTEÀ5R PRIMARY KEY, v TEXT);
97*a3944bc4Sdan  CREATE VIEW t3 AS SELECT * FROM t3_a UNION ALL SELECT * FROM t3_b;
98*a3944bc4Sdan}
99*a3944bc4Sdanfaultsim_save_and_close
100*a3944bc4Sdan
101*a3944bc4Sdando_faultsim_test 4 -faults oom-t* -prep {
102*a3944bc4Sdan  faultsim_restore_and_reopen
103*a3944bc4Sdan} -body {
104*a3944bc4Sdan  execsql {
105*a3944bc4Sdan    SELECT 1 FROM t1_a LEFT JOIN t3 ON ((1+1) AND k=1)
106*a3944bc4Sdan  }
107*a3944bc4Sdan} -test {
108*a3944bc4Sdan  faultsim_test_result {0 {}}
109*a3944bc4Sdan}
1104965ebceSdan
1114965ebceSdanfinish_test
112