]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix a problem with zeroblob() and CAST(...) expressions that could cause an assert...
authordanielk1977 <danielk1977@noemail.net>
Wed, 30 May 2007 06:19:32 +0000 (06:19 +0000)
committerdanielk1977 <danielk1977@noemail.net>
Wed, 30 May 2007 06:19:32 +0000 (06:19 +0000)
FossilOrigin-Name: 03750a2a6b5186689f7db6650c0a889429790b03

manifest
manifest.uuid
src/vdbemem.c
test/zeroblob.test

index dfb4ad9e361ab6120ade00ba1c3e90bf87ab38c0..9f9319527a61ed96c292ac75716aff46341c74c9 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Consider\sexplicit\scollate\sclauses\swhen\smatching\sWHERE\sconstraints\sto\sindices.\sFix\sfor\s#2391.\s(CVS\s4040)
-D 2007-05-29T12:11:30
+C Fix\sa\sproblem\swith\szeroblob()\sand\sCAST(...)\sexpressions\sthat\scould\scause\san\sassert()\sto\sfail.\s(CVS\s4041)
+D 2007-05-30T06:19:33
 F Makefile.in a42354804b50c2708ce72cf79e4daa30f50191b5
 F Makefile.linux-gcc 2d8574d1ba75f129aba2019f0b959db380a90935
 F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
@@ -140,7 +140,7 @@ F src/vdbeapi.c f89d6bc5264e66f44589e454fbeeee96854d0dd3
 F src/vdbeaux.c a978d170b2ca99c8ff3da8a91f116a66da2600ac
 F src/vdbeblob.c 96f3572fdc45eda5be06e6372b612bc30742d9f0
 F src/vdbefifo.c 3ca8049c561d5d67cbcb94dc909ae9bb68c0bf8f
-F src/vdbemem.c 332875a5fc9ac482e00701db5487ceb7f6fc1adc
+F src/vdbemem.c 328e4897431a277e8670159a4ecc82754f5d9d75
 F src/vtab.c c5ebebf615b2f29499fbe97a584c4bb342632aa0
 F src/where.c 1c27ddb2f19976175fecdcf8f5a0ca23596917fb
 F tclinstaller.tcl 4356d9d94d2b5ed5e68f9f0c80c4df3048dd7617
@@ -419,7 +419,7 @@ F test/where.test 5c342d6ad0d777275d4740ea5cbeaf5173b6eda4
 F test/where2.test 3249d426b3fc7a106713d784e1628307fc308d2e
 F test/where3.test 0a30fe9808b0fa01c46d0fcf4fac0bf6cf75bb30
 F test/where4.test b68496500bff496e83e76ae4ffb493b99064eac6
-F test/zeroblob.test 12a3a44cb5c60816af4a38e4ab8713e83bf5e252
+F test/zeroblob.test 0e0250c8853f78e22dd0c07eccb36126d8be7aa6
 F tool/diffdb.c 7524b1b5df217c20cd0431f6789851a4e0cb191b
 F tool/fragck.tcl 5265a95126abcf6ab357f7efa544787e5963f439
 F tool/lemon.c c8c8b25ab1ac8156b3ad83ba4ea1bf00d5e07f5a
@@ -495,7 +495,7 @@ F www/tclsqlite.tcl bb0d1357328a42b1993d78573e587c6dcbc964b9
 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
 F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
 F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5
-P 1abf784fe27cdc61b6b944b79d024ea98eb5289e
-R 2231e0859ae00b3b5f9f014c6b668680
+P f9a95e92dfaaa61ec0a44b9b7017b07929c94d26
+R 669d18871f9c948e2f1efb490acd8d0d
 U danielk1977
-Z b43a8281516bbb9de3a5fb2d18123729
+Z 49b3f7347b55c791931b6c0615c872bf
index 87643cd7e23a9da500ed57ba0dcb0f3483da2279..736118dc2e3d08d27730795ca33b88f49ba59b80 100644 (file)
@@ -1 +1 @@
-f9a95e92dfaaa61ec0a44b9b7017b07929c94d26
\ No newline at end of file
+03750a2a6b5186689f7db6650c0a889429790b03
\ No newline at end of file
index c29454d7ce525e2ebb3743b217bdd70daacecc6d..0366c626d5f3efbd9269dc46d9dbeffcb2afe613 100644 (file)
@@ -162,7 +162,10 @@ int sqlite3VdbeMemNulTerminate(Mem *pMem){
   if( pMem->flags & (MEM_Static|MEM_Ephem) ){
     return sqlite3VdbeMemMakeWriteable(pMem);
   }else{
-    char *z = sqliteMalloc(pMem->n+2);
+    char *z; 
+    sqlite3VdbeMemExpandBlob(pMem);
+    z = sqliteMalloc(pMem->n+2);
+
     if( !z ) return SQLITE_NOMEM;
     memcpy(z, pMem->z, pMem->n);
     z[pMem->n] = 0;
index 5763559a03441dbdf3a5619126bd479139cc9749..2960316fd5fbed46d57611a14bc1868c6bc5e287 100644 (file)
@@ -13,7 +13,7 @@
 # including the sqlite3_bind_zeroblob(), sqlite3_result_zeroblob(),
 # and the built-in zeroblob() SQL function.
 #
-# $Id: zeroblob.test,v 1.4 2007/05/23 06:31:39 drh Exp $
+# $Id: zeroblob.test,v 1.5 2007/05/30 06:19:33 danielk1977 Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
@@ -127,6 +127,29 @@ do_test zeroblob-4.1 {
     SELECT hex(zeroblob(2) || x'61')
   }
 } {000061}
+
+# Check various CAST(...) operations on zeroblob.
+#
+do_test zeroblob-5.1 {
+  execsql {
+    SELECT CAST (zeroblob(100) AS REAL);
+  }
+} {0.0}
+do_test zeroblob-5.2 {
+  execsql {
+    SELECT CAST (zeroblob(100) AS INTEGER);
+  }
+} {0}
+do_test zeroblob-5.3 {
+  execsql {
+    SELECT CAST (zeroblob(100) AS TEXT);
+  }
+} {{}}
+do_test zeroblob-5.4 {
+  execsql {
+    SELECT CAST(zeroblob(100) AS BLOB);
+  }
+} [execsql {SELECT zeroblob(100)}]
   
 
 finish_test