mirror of https://github.com/sqlite/sqlite
Further fuzzer test cases. Fix a case in the fuzzer where an error code was being dropped.
FossilOrigin-Name: 8b77d3953f082e6fa42e42fe903ea9eddf99dd91
This commit is contained in:
parent
766348febe
commit
4965ebceb7
15
manifest
15
manifest
|
@ -1,5 +1,5 @@
|
|||
C Add\sfurther\stest\scases\sand\sminor\sfixes\sfor\sthe\sfuzzer.
|
||||
D 2012-02-21T10:36:27.146
|
||||
C Further\sfuzzer\stest\scases.\sFix\sa\scase\sin\sthe\sfuzzer\swhere\san\serror\scode\swas\sbeing\sdropped.
|
||||
D 2012-02-21T14:11:12.123
|
||||
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
|
||||
F Makefile.in 3f79a373e57c3b92dabf76f40b065e719d31ac34
|
||||
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
|
||||
|
@ -206,7 +206,7 @@ F src/test_config.c a036a69b550ebc477ab9ca2b37269201f888436e
|
|||
F src/test_demovfs.c 20a4975127993f4959890016ae9ce5535a880094
|
||||
F src/test_devsym.c e7498904e72ba7491d142d5c83b476c4e76993bc
|
||||
F src/test_func.c 6232d722a4ddb193035aa13a03796bf57d6c12fd
|
||||
F src/test_fuzzer.c d557ab99e9f1c0d8ae7ac639b4c3d4babd279f90
|
||||
F src/test_fuzzer.c 5d716ce83ee678471dbf91a05c33ab05f115ed61
|
||||
F src/test_hexio.c c4773049603151704a6ab25ac5e936b5109caf5a
|
||||
F src/test_init.c 3cbad7ce525aec925f8fda2192d576d47f0d478a
|
||||
F src/test_intarray.c d879bbf8e4ce085ab966d1f3c896a7c8b4f5fc99
|
||||
|
@ -504,7 +504,8 @@ F test/fuzz2.test 207d0f9d06db3eaf47a6b7bfc835b8e2fc397167
|
|||
F test/fuzz3.test aec64345184d1662bd30e6a17851ff659d596dc5
|
||||
F test/fuzz_common.tcl a87dfbb88c2a6b08a38e9a070dabd129e617b45b
|
||||
F test/fuzz_malloc.test 328f70aaca63adf29b4c6f06505ed0cf57ca7c26
|
||||
F test/fuzzer1.test 098fc6dc6edcc8430d8e29a27eae6b9825d35470
|
||||
F test/fuzzer1.test 8fb031a789f68c29236bf90e31919ebbf94cb730
|
||||
F test/fuzzerfault.test 00fba714b2c52603c532cbf336b4901252e0e48d
|
||||
F test/hook.test 5f3749de6462a6b87b4209b74adf7df5ac2df639
|
||||
F test/icu.test 70df4faca133254c042d02ae342c0a141f2663f4
|
||||
F test/in.test a7b8a0f43da81cd08645b7a710099ffe9ad1126b
|
||||
|
@ -989,7 +990,7 @@ F tool/tostr.awk e75472c2f98dd76e06b8c9c1367f4ab07e122d06
|
|||
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
|
||||
F tool/warnings-clang.sh 9f406d66e750e8ac031c63a9ef3248aaa347ef2a
|
||||
F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381
|
||||
P bf1dc7907cf1a5c7e19b04fa1278b2089316c30a
|
||||
R e5d50c19b0286a351f7b9b6f103c6c32
|
||||
P 583dde93a9176ba4fff85241bafbbe4e5a6cc95f
|
||||
R 5eaa36a3b096a39cabce5b0dfd058e68
|
||||
U dan
|
||||
Z 5de28f986fce8d4352f35f6c3b70b1eb
|
||||
Z 4089608a3cec5128a943f2b568b6cca4
|
||||
|
|
|
@ -1 +1 @@
|
|||
583dde93a9176ba4fff85241bafbbe4e5a6cc95f
|
||||
8b77d3953f082e6fa42e42fe903ea9eddf99dd91
|
|
@ -532,8 +532,9 @@ static int fuzzerConnect(
|
|||
}
|
||||
|
||||
if( rc==SQLITE_OK ){
|
||||
sqlite3_declare_vtab(db, "CREATE TABLE x(word, distance, ruleset)");
|
||||
}else{
|
||||
rc = sqlite3_declare_vtab(db, "CREATE TABLE x(word,distance,ruleset)");
|
||||
}
|
||||
if( rc!=SQLITE_OK ){
|
||||
fuzzerDisconnect((sqlite3_vtab *)pNew);
|
||||
pNew = 0;
|
||||
}
|
||||
|
|
|
@ -1695,7 +1695,6 @@ do_execsql_test 6.2.2 {
|
|||
ORDER BY cost asc, rowid asc LIMIT 9;
|
||||
} {hw hx hy hz ia ib ic id ie}
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
# Test using different types of quotes with CREATE VIRTUAL TABLE
|
||||
# arguments.
|
||||
|
@ -1717,5 +1716,114 @@ foreach {tn sql} {
|
|||
} {aaa baa aba aab bab abb bba bbb}
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
# Test using a fuzzer table in different contexts.
|
||||
#
|
||||
do_execsql_test 8.1 {
|
||||
CREATE TABLE x3_rules(rule_set, cFrom, cTo, cost);
|
||||
INSERT INTO x3_rules VALUES(2, 'a', 'x', 10);
|
||||
INSERT INTO x3_rules VALUES(2, 'a', 'y', 9);
|
||||
INSERT INTO x3_rules VALUES(2, 'a', 'z', 8);
|
||||
CREATE VIRTUAL TABLE x3 USING fuzzer(x3_rules);
|
||||
}
|
||||
|
||||
do_execsql_test 8.2.1 {
|
||||
SELECT cFrom, cTo, word
|
||||
FROM x3_rules CROSS JOIN x3
|
||||
WHERE word MATCH 'a' AND cost=distance AND ruleset=2;
|
||||
} {a x x a y y a z z}
|
||||
|
||||
do_execsql_test 8.2.2 {
|
||||
SELECT cFrom, cTo, word
|
||||
FROM x3 CROSS JOIN x3_rules
|
||||
WHERE word MATCH 'a' AND cost=distance AND ruleset=2;
|
||||
} {a z z a y y a x x}
|
||||
|
||||
do_execsql_test 8.2.3 {
|
||||
SELECT cFrom, cTo, word
|
||||
FROM x3_rules, x3
|
||||
WHERE word MATCH 'a' AND cost=distance AND ruleset=2;
|
||||
} {a z z a y y a x x}
|
||||
|
||||
do_execsql_test 8.2.4 {
|
||||
SELECT cFrom, cTo, word
|
||||
FROM x3, x3_rules
|
||||
WHERE word MATCH 'a' AND cost=distance AND ruleset=2;
|
||||
} {a z z a y y a x x}
|
||||
|
||||
do_execsql_test 8.2.5 {
|
||||
CREATE INDEX i1 ON x3_rules(cost);
|
||||
SELECT cFrom, cTo, word
|
||||
FROM x3_rules, x3
|
||||
WHERE word MATCH 'a' AND cost=distance AND ruleset=2;
|
||||
} {a z z a y y a x x}
|
||||
|
||||
do_execsql_test 8.2.5 {
|
||||
SELECT word FROM x3_rules, x3 WHERE word MATCH x3_rules.cFrom AND ruleset=2;
|
||||
} {a z y x a z y x a z y x}
|
||||
|
||||
do_execsql_test 8.2.6 {
|
||||
SELECT word FROM x3_rules, x3
|
||||
WHERE word MATCH x3_rules.cFrom
|
||||
AND ruleset=2
|
||||
AND x3_rules.cost=8;
|
||||
} {a z y x}
|
||||
|
||||
do_execsql_test 8.2.7 {
|
||||
CREATE TABLE t1(a, b);
|
||||
CREATE INDEX i2 ON t1(b);
|
||||
SELECT word, distance FROM x3, t1
|
||||
WHERE x3.word MATCH t1.a AND ruleset=2 AND distance=t1.b;
|
||||
} {}
|
||||
|
||||
do_execsql_test 8.2.8 {
|
||||
INSERT INTO x3_rules VALUES(1, 'a', 't', 5);
|
||||
INSERT INTO x3_rules VALUES(1, 'a', 'u', 4);
|
||||
INSERT INTO x3_rules VALUES(1, 'a', 'v', 3);
|
||||
DROP TABLE x3;
|
||||
CREATE VIRTUAL TABLE x3 USING fuzzer(x3_rules);
|
||||
SELECT * FROM x3_rules;
|
||||
} {
|
||||
2 a x 10
|
||||
2 a y 9
|
||||
2 a z 8
|
||||
1 a t 5
|
||||
1 a u 4
|
||||
1 a v 3
|
||||
}
|
||||
|
||||
do_catchsql_test 8.2.9 {
|
||||
SELECT word FROM x3 WHERE ruleset=2 AND word MATCH 'a' AND WORD MATCH 'b';
|
||||
} {1 {unable to use function MATCH in the requested context}}
|
||||
|
||||
do_execsql_test 8.2.10 {
|
||||
SELECT word FROM x3 WHERE ruleset=1 AND word MATCH 'a'
|
||||
} {a v u t}
|
||||
|
||||
# The term "ruleset<=1" is not handled by the fuzzer module. Instead, it
|
||||
# is handled by SQLite, which assumes that all rows have a NULL value in
|
||||
# the ruleset column. Since NULL<=1 is never true, this query returns
|
||||
# no rows.
|
||||
do_execsql_test 8.2.11 {
|
||||
SELECT word FROM x3 WHERE ruleset<=1 AND word MATCH 'a'
|
||||
} {}
|
||||
|
||||
do_execsql_test 8.2.12 {
|
||||
SELECT word FROM x3 WHERE ruleset=1 AND word MATCH 'a' ORDER BY distance ASC;
|
||||
} {a v u t}
|
||||
|
||||
do_execsql_test 8.2.13 {
|
||||
SELECT word FROM x3 WHERE ruleset=1 AND word MATCH 'a' ORDER BY distance DESC;
|
||||
} {t u v a}
|
||||
|
||||
do_execsql_test 8.2.13 {
|
||||
SELECT word FROM x3 WHERE ruleset=1 AND word MATCH 'a' ORDER BY word ASC;
|
||||
} {a t u v}
|
||||
|
||||
do_execsql_test 8.2.14 {
|
||||
SELECT word FROM x3 WHERE ruleset=1 AND word MATCH 'a' ORDER BY word DESC;
|
||||
} {v u t a}
|
||||
|
||||
|
||||
finish_test
|
||||
|
||||
|
|
|
@ -0,0 +1,47 @@
|
|||
# 2012 February 21
|
||||
#
|
||||
# The author disclaims copyright to this source code. In place of
|
||||
# a legal notice, here is a blessing:
|
||||
#
|
||||
# May you do good and not evil.
|
||||
# May you find forgiveness for yourself and forgive others.
|
||||
# May you share freely, never taking more than you give.
|
||||
#
|
||||
#***********************************************************************
|
||||
# This file implements regression tests for TCL interface to the
|
||||
# SQLite library.
|
||||
#
|
||||
|
||||
set testdir [file dirname $argv0]
|
||||
source $testdir/tester.tcl
|
||||
ifcapable !vtab { finish_test ; return }
|
||||
set ::testprefix fuzzerfault
|
||||
|
||||
register_fuzzer_module db
|
||||
|
||||
do_test 1-pre1 {
|
||||
execsql {
|
||||
CREATE TABLE x1_rules(ruleset, cFrom, cTo, cost);
|
||||
INSERT INTO x1_rules VALUES(0, 'a', 'b', 1);
|
||||
INSERT INTO x1_rules VALUES(0, 'a', 'c', 2);
|
||||
INSERT INTO x1_rules VALUES(0, 'a', 'd', 3);
|
||||
}
|
||||
faultsim_save_and_close
|
||||
} {}
|
||||
|
||||
do_faultsim_test 1 -faults oom-t* -prep {
|
||||
faultsim_restore_and_reopen
|
||||
register_fuzzer_module db
|
||||
} -body {
|
||||
execsql {
|
||||
CREATE VIRTUAL TABLE x1 USING fuzzer(x1_rules);
|
||||
SELECT word FROM x1 WHERE word MATCH 'xax';
|
||||
}
|
||||
} -test {
|
||||
faultsim_test_result {0 {xax xbx xcx xdx}} \
|
||||
{1 {vtable constructor failed: x1}}
|
||||
}
|
||||
|
||||
|
||||
|
||||
finish_test
|
Loading…
Reference in New Issue