gitlab.com/CoiaPrant/sqlite3@v1.19.1/testdata/tcl/fuzzerfault.test (about) 1 # 2012 February 21 2 # 3 # The author disclaims copyright to this source code. In place of 4 # a legal notice, here is a blessing: 5 # 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. 9 # 10 #*********************************************************************** 11 # This file implements regression tests for TCL interface to the 12 # SQLite library. 13 # 14 15 set testdir [file dirname $argv0] 16 source $testdir/tester.tcl 17 ifcapable !vtab { finish_test ; return } 18 set ::testprefix fuzzerfault 19 20 load_static_extension db fuzzer 21 22 do_test 1-pre1 { 23 execsql { 24 CREATE TABLE x1_rules(ruleset, cFrom, cTo, cost); 25 INSERT INTO x1_rules VALUES(0, 'a', 'b', 1); 26 INSERT INTO x1_rules VALUES(0, 'a', 'c', 2); 27 INSERT INTO x1_rules VALUES(0, 'a', 'd', 3); 28 } 29 faultsim_save_and_close 30 } {} 31 do_faultsim_test 1 -prep { 32 faultsim_restore_and_reopen 33 load_static_extension db fuzzer 34 } -body { 35 execsql { 36 CREATE VIRTUAL TABLE x1 USING fuzzer(x1_rules); 37 SELECT word FROM x1 WHERE word MATCH 'xax'; 38 } 39 } -test { 40 faultsim_test_result {0 {xax xbx xcx xdx}} \ 41 {1 {vtable constructor failed: x1}} 42 } 43 44 do_test 2-pre1 { 45 faultsim_delete_and_reopen 46 load_static_extension db fuzzer 47 execsql { 48 CREATE TABLE x2_rules(ruleset, cFrom, cTo, cost); 49 INSERT INTO x2_rules VALUES(0, 'a', 'x', 1); 50 INSERT INTO x2_rules VALUES(0, 'b', 'x', 2); 51 INSERT INTO x2_rules VALUES(0, 'c', 'x', 3); 52 CREATE VIRTUAL TABLE x2 USING fuzzer(x2_rules); 53 } 54 faultsim_save_and_close 55 } {} 56 57 do_faultsim_test 2 -prep { 58 faultsim_restore_and_reopen 59 load_static_extension db fuzzer 60 } -body { 61 execsql { 62 SELECT count(*) FROM x2 WHERE word MATCH 'abc'; 63 } 64 } -test { 65 faultsim_test_result {0 8} {1 {vtable constructor failed: x2}} 66 } 67 68 do_test 3-pre1 { 69 faultsim_delete_and_reopen 70 execsql { 71 CREATE TABLE x1_rules(ruleset, cFrom, cTo, cost); 72 INSERT INTO x1_rules VALUES(0, 'a', 73 '123456789012345678901234567890a1234567890123456789', 10 74 ); 75 } 76 faultsim_save_and_close 77 } {} 78 79 do_faultsim_test 3 -prep { 80 faultsim_restore_and_reopen 81 load_static_extension db fuzzer 82 } -body { 83 execsql { 84 CREATE VIRTUAL TABLE x1 USING fuzzer(x1_rules); 85 SELECT count(*) FROM (SELECT * FROM x1 WHERE word MATCH 'a' LIMIT 2); 86 } 87 } -test { 88 faultsim_test_result {0 2} {1 {vtable constructor failed: x1}} 89 } 90 91 #------------------------------------------------------------------------- 92 reset_db 93 do_execsql_test 4.0 { 94 CREATE TABLE t1_a(a INTEFDR PRIMARY KEY, b TEXT); 95 CREATE TABLE t3_a(k FnTEGER PRIMARY KEY, v TEXT); 96 CREATE TABLE t3_b(k INTEĆ5R PRIMARY KEY, v TEXT); 97 CREATE VIEW t3 AS SELECT * FROM t3_a UNION ALL SELECT * FROM t3_b; 98 } 99 faultsim_save_and_close 100 101 do_faultsim_test 4 -faults oom-t* -prep { 102 faultsim_restore_and_reopen 103 } -body { 104 execsql { 105 SELECT 1 FROM t1_a LEFT JOIN t3 ON ((1+1) AND k=1) 106 } 107 } -test { 108 faultsim_test_result {0 {}} 109 } 110 111 finish_test