Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Extend out-of-memory testing with fuzzily generated sql some. One fix for a problem found by the same. (CVS 4044) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
d2282e64f1320913797dfb4dae4db042 |
User & Date: | danielk1977 2007-05-31 08:20:44.000 |
Context
2007-06-02
| ||
07:54 | Fix a vdbe stack leak that could occur where one side of a WHERE clause inequality evaluated to SQL null. (CVS 4045) (check-in: 17152bf1a2 user: danielk1977 tags: trunk) | |
2007-05-31
| ||
08:20 | Extend out-of-memory testing with fuzzily generated sql some. One fix for a problem found by the same. (CVS 4044) (check-in: d2282e64f1 user: danielk1977 tags: trunk) | |
2007-05-30
| ||
10:36 | Add some extra tests for malloc failure during expression parsing and execution using fuzzily generated SQL. (CVS 4043) (check-in: 7522d2fb32 user: danielk1977 tags: trunk) | |
Changes
Changes to src/select.c.
︙ | ︙ | |||
8 9 10 11 12 13 14 | ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** This file contains C code routines that are called by the parser ** to handle SELECT statements in SQLite. ** | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** This file contains C code routines that are called by the parser ** to handle SELECT statements in SQLite. ** ** $Id: select.c,v 1.349 2007/05/31 08:20:44 danielk1977 Exp $ */ #include "sqliteInt.h" /* ** Delete all the content of a Select structure but do not deallocate ** the select structure itself. |
︙ | ︙ | |||
2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 | } if( p->pPrior==0 ){ if( processOrderGroupBy(&sNC, p->pOrderBy, "ORDER") || processOrderGroupBy(&sNC, pGroupBy, "GROUP") ){ return SQLITE_ERROR; } } /* Make sure the GROUP BY clause does not contain aggregate functions. */ if( pGroupBy ){ struct ExprList_item *pItem; for(i=0, pItem=pGroupBy->a; i<pGroupBy->nExpr; i++, pItem++){ | > > > > | 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 | } if( p->pPrior==0 ){ if( processOrderGroupBy(&sNC, p->pOrderBy, "ORDER") || processOrderGroupBy(&sNC, pGroupBy, "GROUP") ){ return SQLITE_ERROR; } } if( sqlite3MallocFailed() ){ return SQLITE_NOMEM; } /* Make sure the GROUP BY clause does not contain aggregate functions. */ if( pGroupBy ){ struct ExprList_item *pItem; for(i=0, pItem=pGroupBy->a; i<pGroupBy->nExpr; i++, pItem++){ |
︙ | ︙ |
Changes to test/fuzz_malloc.test.
︙ | ︙ | |||
8 9 10 11 12 13 14 | # 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. # | | > > > > > > > > > < | | > > > > > > > > > > > > > > > > > > > > | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | # 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.2 2007/05/31 08:20:44 danielk1977 Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl source $testdir/fuzz_common.tcl source $testdir/malloc_common.tcl set ::REPEATS 20 # # 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 sqlite_malloc_fail 0 db close file delete test.db test.db-journal sqlite3 db test.db set ::prep $::fuzzyopts(-sqlprep) execsql $::prep for {set ii 0} {$ii < $::fuzzyopts(-repeats)} {incr ii} { set ::sql [subst $::fuzzyopts(-template)] 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 sqlite_malloc_fail 0 finish_test |
Changes to test/mallocB.test.
︙ | ︙ | |||
8 9 10 11 12 13 14 | # May you share freely, never taking more than you give. # #*********************************************************************** # This file contains additional out-of-memory checks (see malloc.tcl). # These were all discovered by fuzzy generation of SQL. Apart from # that they have little in common. # | | > | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | # May you share freely, never taking more than you give. # #*********************************************************************** # This file contains additional out-of-memory checks (see malloc.tcl). # These were all discovered by fuzzy generation of SQL. Apart from # that they have little in common. # # $Id: mallocB.test,v 1.2 2007/05/31 08:20:44 danielk1977 Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl source $testdir/malloc_common.tcl # Only run these tests if memory debugging is turned on. # if {[info command sqlite_malloc_stat]==""} { puts "Skipping malloc tests: not compiled with -DSQLITE_MEMDEBUG..." finish_test return } do_malloc_test mallocB-1 -sqlbody {SELECT - 456} do_malloc_test mallocB-2 -sqlbody {SELECT - 456.1} do_malloc_test mallocB-3 -sqlbody {SELECT random()} do_malloc_test mallocB-4 -sqlbody {SELECT zeroblob(1000)} do_malloc_test mallocB-5 -sqlbody {SELECT * FROM (SELECT 1) GROUP BY 1;} sqlite_malloc_fail 0 finish_test |