]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Do not accidently truncate zeroblob values when doing an arithmetic
authordrh <drh@noemail.net>
Fri, 25 Jan 2019 20:09:04 +0000 (20:09 +0000)
committerdrh <drh@noemail.net>
Fri, 25 Jan 2019 20:09:04 +0000 (20:09 +0000)
operation.  Fix for ticket [bb4bdb9f7f654b0bb9f34cfba].

FossilOrigin-Name: 13f6942eb0da2d92a0830f18640ce64208bd0cd6ff6d0c97e4a4c57ac3d65ba6

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

index e94d5e4daafb5ceb177fdf80f234a7351087ef25..9b020d7aa58c25962ab6704177351b3bbe906615 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Reinitialize\sdebugging\sinformation\son\sregisters\sof\sa\strigger\sprior\sto\seach\ninvocation\sof\sthe\strigger.\s\sThis\sprevents\sfalse-positives\sfrom\sthe\nsqlite3VdbeMemAboutToChange()\stest\slogic.
-D 2019-01-25T19:29:01.388
+C Do\snot\saccidently\struncate\szeroblob\svalues\swhen\sdoing\san\sarithmetic\noperation.\s\sFix\sfor\sticket\s[bb4bdb9f7f654b0bb9f34cfba].
+D 2019-01-25T20:09:04.290
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F Makefile.in 9947eae873c07ae894d4c8633b76c0a0daca7b9fd54401096a77d1a6c7b74359
@@ -585,7 +585,7 @@ F src/upsert.c 0dd81b40206841814d46942a7337786932475f085716042d0cb2fc7791bf8ca4
 F src/utf.c 810fbfebe12359f10bc2a011520a6e10879ab2a163bcb26c74768eab82ea62a5
 F src/util.c 82a2e3f691a3b654be872e305dab1f455e565dedf5e6a90c818c1ab307c00432
 F src/vacuum.c a9f389f41556c0ec310bc9169dc9476603c30a0a913ad92bfbc75c86886967ca
-F src/vdbe.c 2c99f790ae42af5268529cb67cfd4beaf9542cdc62fd0a10a18edec1fa9a5c09
+F src/vdbe.c b7b6f965153607072917dbd81d654a268abf4872c58d556701d1549550766c02
 F src/vdbe.h 712bca562eaed1c25506b9faf9680bdc75fc42e2f4a1cd518d883fa79c7a4237
 F src/vdbeInt.h a76d5eed62c76bcd8de7afd3147fac1bc40c5a870582664bcd7d071ef437c37f
 F src/vdbeapi.c 57a2d794a8833f269b878dbc24e955369bdb379af6c4e93ebc5ce1a20fa3daf4
@@ -1698,7 +1698,7 @@ F test/without_rowid5.test 89b1c587bd92a0590e440da33e7666bf4891572a
 F test/without_rowid6.test 1f99644e6508447fb050f73697350c7ceca3392e
 F test/wordcount.c d721a4b6fae93e6e33449700bce1686bc23257c27425bc3ef1599dc912adec66
 F test/writecrash.test f1da7f7adfe8d7f09ea79b42e5ca6dcc41102f27f8e334ad71539501ddd910cc
-F test/zeroblob.test 3857870fe681b8185654414a9bccfde80b62a0fa
+F test/zeroblob.test 07a5b11ab591d1f26c626945fb7f228f68b993533b2ada77273edf6ee29db174
 F test/zerodamage.test 9c41628db7e8d9e8a0181e59ea5f189df311a9f6ce99cc376dc461f66db6f8dc
 F test/zipfile.test b3b558639f7a103e095713ad0f57fec1fce1b7d60c8054df5789b98f7547a395
 F test/zipfile2.test 9903388a602a3834189857a985106ff95c3bba6a3969e0134127df991889db5d
@@ -1804,7 +1804,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 3ff220ad378d547538b4501e6b2201e835a2c66891e5e40856db377c101a50e5
-R ecf877bc394877eb1dbb4bb85afd2412
+P 98b3b97573ccb3d986d1552f97f96e15088a598945923adcac77010c1e8b7fe4
+R 1d7c45280e753f1cbd5da589341c01ea
 U drh
-Z 456c3e392f5a0f89b55001f14b2aaf25
+Z 62265ca3345faf783a3f875668f7525d
index 751fa3345573e9389981577e9e6f9b3fd3cbbf95..eda02a5d0b6e70deefea2ba5d350c6b8ba905dcc 100644 (file)
@@ -1 +1 @@
-98b3b97573ccb3d986d1552f97f96e15088a598945923adcac77010c1e8b7fe4
\ No newline at end of file
+13f6942eb0da2d92a0830f18640ce64208bd0cd6ff6d0c97e4a4c57ac3d65ba6
\ No newline at end of file
index 09cf55b69639ea19f38b43e25499149dd69005a8..98df0a39772f3f4df28b926a8c88fe3254bd7e50 100644 (file)
@@ -385,6 +385,7 @@ void sqlite3ValueApplyAffinity(
 static u16 SQLITE_NOINLINE computeNumericType(Mem *pMem){
   assert( (pMem->flags & (MEM_Int|MEM_Real))==0 );
   assert( (pMem->flags & (MEM_Str|MEM_Blob))!=0 );
+  ExpandBlob(pMem);
   if( sqlite3AtoF(pMem->z, &pMem->u.r, pMem->n, pMem->enc)==0 ){
     return 0;
   }
index 0514644a28a85382b1f4ec837d30fc63893d2d08..9daa7d8d9a4f9b365a268a3a766334de71a8efce 100644 (file)
@@ -316,5 +316,16 @@ do_test 12.5 {
 
 sqlite3_finalize $stmt
 
+# 2019-01-25 https://sqlite.org/src/tktview/bb4bdb9f7f654b0bb9f34cfbac
+# Zeroblob truncated by an index on expression
+#
+do_execsql_test 13.100 {
+  DROP TABLE IF EXISTS t1;
+  CREATE TABLE t1(a,b,c);
+  CREATE INDEX t1bbc ON t1(b, b+c);
+  INSERT INTO t1(a,b,c) VALUES(1,zeroblob(8),3);
+  SELECT a, quote(b), length(b), c FROM t1;
+} {1 X'0000000000000000' 8 3}
+
 test_restore_config_pagecache
 finish_test