]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add cases to fuzz.test. Some tests in this file fail at the moment. (CVS 3973)
authordanielk1977 <danielk1977@noemail.net>
Thu, 10 May 2007 17:32:48 +0000 (17:32 +0000)
committerdanielk1977 <danielk1977@noemail.net>
Thu, 10 May 2007 17:32:48 +0000 (17:32 +0000)
FossilOrigin-Name: 1e8fcb3fbed7beb8bb1370953ecf3d4b9db01ede

manifest
manifest.uuid
src/vdbe.c
src/vdbeapi.c
test/all.test
test/fuzz.test

index e5d1e3964dc440c7a747409b16e41483cee3ee58..2b8b1b16abb2e9b609c7fd5831f1c7095098cc53 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Add\ssome\sUTF-8\stest\sinfrastructure.\s\sTreat\sNaN\sas\sNULL.\s\sThe\sprintf\sroutines\nprint\sinfinity\sas\s"Inf"\snot\sas\s"NaN".\s\sTicket\s#2345.\s(CVS\s3972)
-D 2007-05-10T17:23:12
+C Add\scases\sto\sfuzz.test.\sSome\stests\sin\sthis\sfile\sfail\sat\sthe\smoment.\s(CVS\s3973)
+D 2007-05-10T17:32:48
 F Makefile.in 87b200ad9970907f76df734d29dff3d294c10935
 F Makefile.linux-gcc 2d8574d1ba75f129aba2019f0b959db380a90935
 F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
@@ -132,10 +132,10 @@ F src/update.c 3359041db390a8f856d67272f299600e2104f350
 F src/utf.c be7c64eed83fa3c01e0c42905e1c311dcd1be704
 F src/util.c 4f6bbcec2b2b1884d652b82c9f8949ede4618d68
 F src/vacuum.c 8bd895d29e7074e78d4e80f948e35ddc9cf2beef
-F src/vdbe.c a2e2a5d6f9105a36d38cbdd8ff47486ea0ba7c1c
+F src/vdbe.c c0b1cd6c7dc40f836184af1cf041cfcadd61c9a5
 F src/vdbe.h 001c5b257567c1d3de7feb2203aac71d0d7b16a3
 F src/vdbeInt.h bddb7931fc1216fda6f6720e18d2a9b1e0f8fc96
-F src/vdbeapi.c 120e04492e98e3cfd5545dd7130c76987e40e8b3
+F src/vdbeapi.c 3ca7808c67a10b5c20150108b431d520d141e93e
 F src/vdbeaux.c 62011e2ccf5fa9b3dcc7fa6ff5f0e0638d324a70
 F src/vdbeblob.c 96f3572fdc45eda5be06e6372b612bc30742d9f0
 F src/vdbefifo.c 3ca8049c561d5d67cbcb94dc909ae9bb68c0bf8f
@@ -144,7 +144,7 @@ F src/vtab.c c5ebebf615b2f29499fbe97a584c4bb342632aa0
 F src/where.c f3920748cc650fc25ac916215500bdb90dee568e
 F tclinstaller.tcl 4356d9d94d2b5ed5e68f9f0c80c4df3048dd7617
 F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
-F test/all.test 1f54c95fea0baa503d5f4788d9d33ef4dd635c86
+F test/all.test 93a40a7612b3c5e6efd1f5b98496a8b02a45cfdb
 F test/alter.test 088d82f140b7fcf0be2f712c826dd70387470aef
 F test/alter2.test 50c3f554b8236d179d72511c0a4f23c5eb7f2af3
 F test/alter3.test a6eec8f454be9b6ce73d8d7dc711453675a10ce7
@@ -248,7 +248,7 @@ F test/fts2l.test 4c53c89ce3919003765ff4fd8d98ecf724d97dd3
 F test/fts2m.test 4b30142ead6f3ed076e880a2a464064c5ad58c51
 F test/fts2n.test a70357e72742681eaebfdbe9007b87ff3b771638
 F test/func.test 6f230b25b235cc1afcc7bd5a41baf7317018a8d1
-F test/fuzz.test 71f1a03e8249f14f15b39562525e5450a1713fd5
+F test/fuzz.test ac67727e8edea39d9ec3a55d3eba4f95231f329b
 F test/hook.test 7e7645fd9a033f79cce8fdff151e32715e7ec50a
 F test/icu.test e6bfae7f625c88fd14df6f540fe835bdfc1e4329
 F test/in.test 369cb2aa1eab02296b4ec470732fe8c131260b1d
@@ -487,7 +487,7 @@ F www/tclsqlite.tcl bb0d1357328a42b1993d78573e587c6dcbc964b9
 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
 F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
 F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5
-P 1e9e6fe75d01d8cf4e1a23505c45f28491f1e902
-R 3021e7397e47b6679eee0e86458d86ce
-U drh
-Z 62c7f31e1b53396b98122862f404dfd2
+P ffe615a71107a38b6f60c7baf4284a5b0aecdc22
+R e35a9f0b80527b9d0b19209722d26b22
+U danielk1977
+Z 29917b781f3cb872f013bdcb708a70d5
index 9f7f1d2ed697bc1b0ca9d678bda668fcc27f96a6..89e20a973b345d88370df3835ebf216f5697d2d6 100644 (file)
@@ -1 +1 @@
-ffe615a71107a38b6f60c7baf4284a5b0aecdc22
\ No newline at end of file
+1e8fcb3fbed7beb8bb1370953ecf3d4b9db01ede
\ No newline at end of file
index 440e1df358e154466fa4337abd77e217422fdde9..07eea5f15f01b7e19b6558e3b56078320c6a102e 100644 (file)
@@ -43,7 +43,7 @@
 ** 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.613 2007/05/10 17:23:12 drh Exp $
+** $Id: vdbe.c,v 1.614 2007/05/10 17:32:48 danielk1977 Exp $
 */
 #include "sqliteInt.h"
 #include "os.h"
@@ -918,7 +918,7 @@ case OP_Pull: {            /* no-push */
   Deephemeralize(pTos);
   for(i=0; i<pOp->p1; i++, pFrom++){
     Deephemeralize(&pFrom[1]);
-    assert( (pFrom->flags & MEM_Ephem)==0 );
+    assert( (pFrom[1].flags & MEM_Ephem)==0 );
     *pFrom = pFrom[1];
     if( pFrom->flags & MEM_Short ){
       assert( pFrom->flags & (MEM_Str|MEM_Blob) );
@@ -2275,6 +2275,9 @@ case OP_MakeRecord: {
     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;
@@ -2282,7 +2285,6 @@ case OP_MakeRecord: {
     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. */
-      assert( pRec->n==0 );
       nZero += pRec->u.i;
     }else if( len ){
       nZero = 0;
index 7ff9ba2979593a65115fbef8f36cc77cab1599b7..91fb9a926e5da518df39396613b8c8bd3320d43e 100644 (file)
@@ -498,9 +498,7 @@ static void columnMallocFailure(sqlite3_stmt *pStmt)
 */
 const void *sqlite3_column_blob(sqlite3_stmt *pStmt, int i){
   const void *val;
-  sqlite3MallocDisallow();
   val = sqlite3_value_blob( columnMem(pStmt,i) );
-  sqlite3MallocAllow();
   return val;
 }
 int sqlite3_column_bytes(sqlite3_stmt *pStmt, int i){
index 3b30875c9467957348afbd07ffbb82acdc60fc90..4e6c0b5db2bd2dc1764ec58f2998030f15d2813f 100644 (file)
@@ -10,7 +10,7 @@
 #***********************************************************************
 # This file runs all tests.
 #
-# $Id: all.test,v 1.41 2007/05/08 15:59:06 danielk1977 Exp $
+# $Id: all.test,v 1.42 2007/05/10 17:32:48 danielk1977 Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
@@ -60,6 +60,7 @@ set EXCLUDE {
   misuse.test
   memleak.test
   sqllimits1.test
+  fuzz.test
 }
 
 # Files to include in the test.  If this list is empty then everything
index 42287abc880af5c512ed67a615757f0fda15c87b..c21387bd266209ecc14fd51a193343befe40478f 100644 (file)
@@ -12,7 +12,7 @@
 # This file implements regression tests for SQLite library.  The
 # focus of this file is testing the SELECT statement.
 #
-# $Id: fuzz.test,v 1.1 2007/05/10 15:37:53 danielk1977 Exp $
+# $Id: fuzz.test,v 1.2 2007/05/10 17:32:48 danielk1977 Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
@@ -23,7 +23,9 @@ proc fuzz {TemplateList} {
   return [subst -novar [lindex $TemplateList $i]]
 }
 
-proc Value {} {
+# Returns a string representing an SQL literal.
+#
+proc Literal {} {
   set TemplateList {
     456 0 -456 1 -1 
     2147483648 2147483647 2147483649 -2147483647 -2147483648 -2147483649
@@ -50,33 +52,53 @@ set ::ExprDepth 0
 proc Expr {} {
   incr ::ExprDepth
 
-  set TemplateList {[Value]}
+  set TemplateList {[Literal]}
   if {$::ExprDepth < 100} {
     lappend TemplateList \
       {[Expr] [BinaryOp] [Expr]}   \
-      {[UnaryOp] [Expr]}           \
-      {([Select])}                 \
-      {[Value]}                    
+      {[UnaryOp] [Expr]}
   }
   if {$::SelectDepth < 10} {
-    lappend TemplateList {([Select])}
+    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 {} {
+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';
@@ -97,14 +119,76 @@ do_test fuzz-1.4 {
     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))
+  }
+} {}
 
-do_test fuzz-2.1 {
-  for {set ii 0} {$ii < 2000} {incr ii} {
+#----------------------------------------------------------------
+# Test some fuzzily generated expressions.
+#
+for {set ii 0} {$ii < 2000} {incr ii} {
+  do_test fuzz-2.1.$ii {
     set ::expr [Expr]
-    execsql "SELECT $::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 a ""
 } {}
+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