diff options
| author | Bernard Xiong <[email protected]> | 2013-11-30 03:36:56 -0800 |
|---|---|---|
| committer | Bernard Xiong <[email protected]> | 2013-11-30 03:36:56 -0800 |
| commit | be2f628160fa1262b6cc10df3823c5f984bc3c48 (patch) | |
| tree | 6a96d2f30c979713b5f175b08c90a03f359faeb6 /components/external/SQLite-3.8.1/test/fuzz_malloc.test | |
| parent | 35d83be62ff504d2b595288e0a377160604e71a8 (diff) | |
| parent | 9326719a12cf54f3418e292835e37ddc3afa92fd (diff) | |
Merge pull request #205 from geniusgogo/sqlite
Sqlite
Diffstat (limited to 'components/external/SQLite-3.8.1/test/fuzz_malloc.test')
| -rw-r--r-- | components/external/SQLite-3.8.1/test/fuzz_malloc.test | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/components/external/SQLite-3.8.1/test/fuzz_malloc.test b/components/external/SQLite-3.8.1/test/fuzz_malloc.test new file mode 100644 index 0000000000..1e31babd92 --- /dev/null +++ b/components/external/SQLite-3.8.1/test/fuzz_malloc.test @@ -0,0 +1,94 @@ +# +# 2007 May 10 +# +# 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 tests malloc failures in concert with fuzzy SQL generation. +# +# $Id: fuzz_malloc.test,v 1.10 2008/08/20 16:35:10 drh Exp $ + +set testdir [file dirname $argv0] +source $testdir/tester.tcl + +ifcapable !memdebug { + finish_test + return +} + +source $testdir/malloc_common.tcl +source $testdir/fuzz_common.tcl + +if {[info exists G(isquick)]} { + set ::REPEATS 20 +} elseif {[info exists G(issoak)]} { + set ::REPEATS 100 +} else { + set ::REPEATS 40 +} + +# +# Usage: do_fuzzy_malloc_test <testname> ?<options>? +# +# -template +# -sqlprep +# -repeats +# +proc do_fuzzy_malloc_test {testname args} { + set ::fuzzyopts(-repeats) $::REPEATS + set ::fuzzyopts(-sqlprep) {} + array set ::fuzzyopts $args + + sqlite3_memdebug_fail -1 + db close + delete_file test.db test.db-journal + sqlite3 db test.db + set ::prep $::fuzzyopts(-sqlprep) + execsql $::prep + set jj 0 + for {set ii 0} {$ii < $::fuzzyopts(-repeats)} {incr ii} { + expr srand($jj) + incr jj + set ::sql [subst $::fuzzyopts(-template)] + # puts fuzyy-sql=\[$::sql\]; flush stdout + foreach {rc res} [catchsql "$::sql"] {} + if {$rc==0} { + do_malloc_test $testname-$ii -sqlbody $::sql -sqlprep $::prep + } else { + incr ii -1 + } + } +} + +#---------------------------------------------------------------- +# Test malloc failure during parsing (and execution) of a fuzzily +# generated expressions. +# +do_fuzzy_malloc_test fuzzy_malloc-1 -template {Select [Expr]} +do_fuzzy_malloc_test fuzzy_malloc-2 -template {[Select]} + +set ::SQLPREP { + BEGIN; + CREATE TABLE abc(a, b, c); + CREATE TABLE def(a, b, c); + CREATE TABLE ghi(a, b, c); + INSERT INTO abc VALUES(1.5, 3, 'a short string'); + INSERT INTO def VALUES(NULL, X'ABCDEF', + 'a longer string. Long enough that it doesn''t fit in Mem.zShort'); + INSERT INTO ghi VALUES(zeroblob(1000), 'hello world', -1257900987654321); + COMMIT; +} +set ::TableList [list abc def ghi] +set ::ColumnList [list a b c] + +do_fuzzy_malloc_test fuzzy_malloc-3 \ + -template {[Select]} \ + -sqlprep $::SQLPREP + +finish_test |
