Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Add cases to fuzz.test. Some tests in this file fail at the moment. (CVS 3973) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
1e8fcb3fbed7beb8bb1370953ecf3d4b |
User & Date: | danielk1977 2007-05-10 17:32:48.000 |
Context
2007-05-10
| ||
17:38 | Simplify failing case in fuzz.test. (CVS 3974) (check-in: a54c74990c user: danielk1977 tags: trunk) | |
17:32 | Add cases to fuzz.test. Some tests in this file fail at the moment. (CVS 3973) (check-in: 1e8fcb3fbe user: danielk1977 tags: trunk) | |
17:23 | Add some UTF-8 test infrastructure. Treat NaN as NULL. The printf routines print infinity as "Inf" not as "NaN". Ticket #2345. (CVS 3972) (check-in: ffe615a711 user: drh tags: trunk) | |
Changes
Changes to src/vdbe.c.
︙ | ︙ | |||
39 40 41 42 43 44 45 | ** ** Various scripts scan this source file in order to generate HTML ** documentation, headers files, or other derived files. The formatting ** of the code in this file is, therefore, important. See other comments ** in this file for details. If in doubt, do not deviate from existing ** commenting and indentation practices when changing or adding code. ** | | | 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | ** ** Various scripts scan this source file in order to generate HTML ** documentation, headers files, or other derived files. The formatting ** of the code in this file is, therefore, important. See other comments ** in this file for details. If in doubt, do not deviate from existing ** commenting and indentation practices when changing or adding code. ** ** $Id: vdbe.c,v 1.614 2007/05/10 17:32:48 danielk1977 Exp $ */ #include "sqliteInt.h" #include "os.h" #include <ctype.h> #include <math.h> #include "vdbeInt.h" |
︙ | ︙ | |||
914 915 916 917 918 919 920 | int i; Mem ts; ts = *pFrom; Deephemeralize(pTos); for(i=0; i<pOp->p1; i++, pFrom++){ Deephemeralize(&pFrom[1]); | | | 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 | int i; Mem ts; ts = *pFrom; Deephemeralize(pTos); for(i=0; i<pOp->p1; i++, pFrom++){ Deephemeralize(&pFrom[1]); assert( (pFrom[1].flags & MEM_Ephem)==0 ); *pFrom = pFrom[1]; if( pFrom->flags & MEM_Short ){ assert( pFrom->flags & (MEM_Str|MEM_Blob) ); assert( pFrom->z==pFrom[1].zShort ); pFrom->z = pFrom->zShort; } } |
︙ | ︙ | |||
2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 | for(pRec=pData0; pRec<=pTos; pRec++){ int len; if( zAffinity ){ applyAffinity(pRec, zAffinity[pRec-pData0], encoding); } if( pRec->flags&MEM_Null ){ containsNull = 1; } serial_type = sqlite3VdbeSerialType(pRec, file_format); len = sqlite3VdbeSerialTypeLen(serial_type); nData += len; nHdr += sqlite3VarintLen(serial_type); if( pRec->flags & MEM_Zero ){ /* Only pure zero-filled BLOBs can be input to this Opcode. ** We do not allow blobs with a prefix and a zero-filled tail. */ | > > > < | 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 | for(pRec=pData0; pRec<=pTos; pRec++){ int len; if( zAffinity ){ applyAffinity(pRec, zAffinity[pRec-pData0], encoding); } if( pRec->flags&MEM_Null ){ containsNull = 1; } if( pRec->flags&MEM_Zero && pRec->n>0 ){ sqlite3VdbeMemExpandBlob(pRec); } serial_type = sqlite3VdbeSerialType(pRec, file_format); len = sqlite3VdbeSerialTypeLen(serial_type); nData += len; nHdr += sqlite3VarintLen(serial_type); if( pRec->flags & MEM_Zero ){ /* Only pure zero-filled BLOBs can be input to this Opcode. ** We do not allow blobs with a prefix and a zero-filled tail. */ nZero += pRec->u.i; }else if( len ){ nZero = 0; } } /* If we have to append a varint rowid to this record, set pRowid |
︙ | ︙ |
Changes to src/vdbeapi.c.
︙ | ︙ | |||
494 495 496 497 498 499 500 | /**************************** sqlite3_column_ ******************************* ** The following routines are used to access elements of the current row ** in the result set. */ const void *sqlite3_column_blob(sqlite3_stmt *pStmt, int i){ const void *val; | < < | 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 | /**************************** sqlite3_column_ ******************************* ** The following routines are used to access elements of the current row ** in the result set. */ const void *sqlite3_column_blob(sqlite3_stmt *pStmt, int i){ const void *val; val = sqlite3_value_blob( columnMem(pStmt,i) ); return val; } int sqlite3_column_bytes(sqlite3_stmt *pStmt, int i){ int val = sqlite3_value_bytes( columnMem(pStmt,i) ); columnMallocFailure(pStmt); return val; } |
︙ | ︙ |
Changes to test/all.test.
1 2 3 4 5 6 7 8 9 10 11 12 | # 2001 September 15 # # 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 runs all tests. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # 2001 September 15 # # 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 runs all tests. # # $Id: all.test,v 1.42 2007/05/10 17:32:48 danielk1977 Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl rename finish_test really_finish_test proc finish_test {} { memleak_check } |
︙ | ︙ | |||
56 57 58 59 60 61 62 63 64 65 66 67 68 69 | crash2.test autovacuum_crash.test quick.test malloc.test misuse.test memleak.test sqllimits1.test } # Files to include in the test. If this list is empty then everything # that is not in the EXCLUDE list is run. # set INCLUDE { } | > | 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | crash2.test autovacuum_crash.test quick.test malloc.test misuse.test memleak.test sqllimits1.test fuzz.test } # Files to include in the test. If this list is empty then everything # that is not in the EXCLUDE list is run. # set INCLUDE { } |
︙ | ︙ |
Changes to test/fuzz.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 implements regression tests for SQLite library. The # focus of this file is testing the SELECT statement. # | | > > | | 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 | # 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 SQLite library. The # focus of this file is testing the SELECT statement. # # $Id: fuzz.test,v 1.2 2007/05/10 17:32:48 danielk1977 Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl proc fuzz {TemplateList} { set n [llength $TemplateList] set i [expr {int(rand()*$n)}] return [subst -novar [lindex $TemplateList $i]] } # Returns a string representing an SQL literal. # proc Literal {} { set TemplateList { 456 0 -456 1 -1 2147483648 2147483647 2147483649 -2147483647 -2147483648 -2147483649 'The' 'first' 'experiments' 'in' 'hardware' 'fault' 'injection' zeroblob(1000) NULL 56.1 -56.1 |
︙ | ︙ | |||
46 47 48 49 50 51 52 | fuzz $TemplateList } set ::ExprDepth 0 proc Expr {} { incr ::ExprDepth | | | < < | > > > > > > | > > > > > > > > > > > > > > > > > > > > > | > | > > > > > > > > > > > > > > | > > > > > > > > > | > | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 | fuzz $TemplateList } set ::ExprDepth 0 proc Expr {} { incr ::ExprDepth set TemplateList {[Literal]} if {$::ExprDepth < 100} { lappend TemplateList \ {[Expr] [BinaryOp] [Expr]} \ {[UnaryOp] [Expr]} } if {$::SelectDepth < 10} { lappend TemplateList {([Select 1])} } set res [fuzz $TemplateList] incr ::ExprDepth -1 return $res } set ::TableList [list] proc Table {} { set TemplateList [concat sqlite_master $::TableList] fuzz $TemplateList } set ::SelectDepth 0 proc Select {{isExpr 0}} { incr ::SelectDepth set TemplateList { {SELECT [Expr]} } if {$::SelectDepth < 5} { lappend TemplateList \ {SELECT [Expr] FROM ([Select])} \ {SELECT [Expr] FROM [Table]} if {0 == $isExpr} { lappend TemplateList \ {SELECT [Expr], [Expr] FROM ([Select]) ORDER BY [Expr]} \ {SELECT * FROM ([Select]) ORDER BY [Expr]} \ } } set res [fuzz $TemplateList] incr ::SelectDepth -1 set res } ######################################################################## #---------------------------------------------------------------- # These tests caused errors that were first caught by the tests # in this file. They are still here. do_test fuzz-1.1 { execsql { SELECT 'abc' LIKE X'ABCD'; } } {0} do_test fuzz-1.2 { execsql { SELECT 'abc' LIKE zeroblob(10); } } {0} do_test fuzz-1.3 { execsql { SELECT zeroblob(10) LIKE 'abc'; } } {0} do_test fuzz-1.4 { execsql { SELECT (- -21) % NOT (456 LIKE zeroblob(10)); } } {0} do_test fuzz-1.5 { execsql { SELECT (SELECT ( SELECT (SELECT -2147483648) FROM (SELECT 1) ORDER BY 1 )) } } {-2147483648} do_test fuzz-1.6 { execsql { SELECT 'abc', zeroblob(1) FROM (SELECT 1) ORDER BY 1 } } [execsql {SELECT 'abc', zeroblob(1)}] do_test fuzz-1.7 { execsql { SELECT + (SELECT (SELECT 'fault' / + -2147483648 % - 123456789.1234567899 * (SELECT 'experiments' OR NOT 'first' / 'hardware' FROM (SELECT 2147483647, + (SELECT 'injection') FROM (SELECT 2147483649) ORDER BY + NULL AND (SELECT 'hardware') GLOB 2147483648))) FROM (SELECT * FROM (SELECT (SELECT (SELECT + (SELECT 456 * -2147483648)) LIKE (SELECT (SELECT (SELECT 'fault') - -56.1)) AND -2147483648) FROM (SELECT * FROM (SELECT 2147483648) ORDER BY (SELECT 56.1))) ORDER BY zeroblob(1)) } } {} #---------------------------------------------------------------- # Test some fuzzily generated expressions. # for {set ii 0} {$ii < 2000} {incr ii} { do_test fuzz-2.1.$ii { set ::expr [Expr] set rc [catch {execsql "SELECT $::expr"} msg] set e [expr { $rc == 0 || $msg eq "parser stack overflow" || 0 == [string first "ORDER BY column number" $msg] }] if {$e == 0} { puts "" puts "SELECT $::expr" puts $msg } set e } {1} } do_test fuzz-3.1 { execsql { CREATE TABLE abc(a, b, c); CREATE TABLE def(d, e, f); CREATE TABLE ghi(g, h, i); } } {} set ::TableList [list abc def ghi] #---------------------------------------------------------------- # Test some fuzzily generated SELECT statements. # for {set ii 0} {$ii < 2000} {incr ii} { do_test fuzz-2.2.$ii { set ::select [Select] set rc [catch {execsql $::select} msg] set e [expr {$rc == 0 || $msg eq "parser stack overflow"}] set e [expr { $rc == 0 || $msg eq "parser stack overflow" || 0 == [string first "ORDER BY column number" $msg] }] if {$e == 0} { puts "" puts $::select puts $msg } set e } {1} } finish_test |