]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
In the OP_Column opcode, when extracting a field that is past the end of
authordrh <drh@noemail.net>
Wed, 29 Oct 2014 00:58:38 +0000 (00:58 +0000)
committerdrh <drh@noemail.net>
Wed, 29 Oct 2014 00:58:38 +0000 (00:58 +0000)
a short record (because the row was originally inserted prior to ALTER TABLE
ADD COLUMN) then make sure the output register is fully NULL and does not
contain leftover flags (such as MEM_Ephem) from its previous use.
Fix for ticket [43107840f1c02].

FossilOrigin-Name: 24780f8ddc1683fc62180e6961dc6bfe1168f4df

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

index cbbdd001c63597217527254456308903d5fef897..209baf8beb4469ce794b08af277b2f23f24b29ca 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Add\snew\stest\sfile\se_totalchanges.test,\scontaining\stests\sof\sthe\ssqlite3_total_changes()\sinterface.
-D 2014-10-28T20:49:59.213
+C In\sthe\sOP_Column\sopcode,\swhen\sextracting\sa\sfield\sthat\sis\spast\sthe\send\sof\na\sshort\srecord\s(because\sthe\srow\swas\soriginally\sinserted\sprior\sto\sALTER\sTABLE\nADD\sCOLUMN)\sthen\smake\ssure\sthe\soutput\sregister\sis\sfully\sNULL\sand\sdoes\snot\ncontain\sleftover\sflags\s(such\sas\sMEM_Ephem)\sfrom\sits\sprevious\suse.\nFix\sfor\sticket\s[43107840f1c02].
+D 2014-10-29T00:58:38.898
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in cf57f673d77606ab0f2d9627ca52a9ba1464146a
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -289,7 +289,7 @@ F src/update.c 3c4ecc282accf12d39edb8d524cf089645e55a13
 F src/utf.c fc6b889ba0779b7722634cdeaa25f1930d93820c
 F src/util.c 3b627daa45c7308c1e36e3dbaa3f9ce7e5c7fa73
 F src/vacuum.c 59f03f92bcff57faa6a8ca256eb29ccddfb0614a
-F src/vdbe.c 1b7e8ccaca2a23ae2804568f34b7c645adfd332d
+F src/vdbe.c 49e659bc165e99b28492004b440e22146dc898ab
 F src/vdbe.h 09f5b4e3719fa454f252322b1cdab5cf1f361327
 F src/vdbeInt.h acc36ac461f973f46ac7942f86abdd93d2f8cfbc
 F src/vdbeapi.c 02d8afcff710eb35e3d9e49cb677308296b00009
@@ -1067,7 +1067,7 @@ F test/unique.test 93f8b2ef5ea51b9495f8d6493429b1fd0f465264
 F test/unique2.test 41e7f83c6827605991160a31380148a9fc5f1339
 F test/unixexcl.test cd6c765f75e50e8e2c2ba763149e5d340ea19825
 F test/unordered.test ca7adce0419e4ca0c50f039885e76ed2c531eda8
-F test/update.test 1b6c488a8f993d090b7ee9ad0e234faa161b3aeb
+F test/update.test 6c68446b8a0a33d522a7c72b320934596a2d7d32
 F test/uri.test 23662b7b61958b0f0e47082de7d06341ccf85d5b
 F test/userauth01.test e740a2697a7b40d7c5003a7d7edaee16acd349a9
 F test/utf16align.test 54cd35a27c005a9b6e7815d887718780b6a462ae
@@ -1209,7 +1209,7 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1
 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh 0abfd78ceb09b7f7c27c688c8e3fe93268a13b32
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 96e9917c350dfe2069b87860bbb961424ff1105a
-R ff91cb59544b367ee28dfb499ecb1ca4
-U dan
-Z ba0579c9ba051395a01d0b2f40d05365
+P f84af4adcc34d7a4c72027bf5b038a1a45a4c307
+R c2870e402bb1970025fb678b8c13d710
+U drh
+Z 3a55744e14b55dcc32cb71f070af972c
index 6aa58547c5ad4a11acb588b1bd8c88baab3cda5b..ea9bca8740fc5980ebc894db177044c5d5003235 100644 (file)
@@ -1 +1 @@
-f84af4adcc34d7a4c72027bf5b038a1a45a4c307
\ No newline at end of file
+24780f8ddc1683fc62180e6961dc6bfe1168f4df
\ No newline at end of file
index d256c6b7707cc872d51bb8688d542ba445a9092a..c17bfdfe14190e59fecdd5b4c610f8d92820da8d 100644 (file)
@@ -2441,7 +2441,7 @@ case OP_Column: {
       if( pOp->p4type==P4_MEM ){
         sqlite3VdbeMemShallowCopy(pDest, pOp->p4.pMem, MEM_Static);
       }else{
-        MemSetTypeFlag(pDest, MEM_Null);
+        sqlite3VdbeMemSetNull(pDest);
       }
       goto op_column_out;
     }
index e67b0efddc683da64a3e9ba70975eb1eea1656be..d7baf6e702a3160d77374eefa7fdde9654db15b9 100644 (file)
@@ -604,5 +604,19 @@ do_test update-14.4 {
 
 } ;# ifcapable {trigger}
 
+# Ticket [https://www.sqlite.org/src/tktview/43107840f1c02] on 2014-10-29
+# An assertion fault on UPDATE
+#
+do_execsql_test update-15.1 {
+  CREATE TABLE t15(a INTEGER PRIMARY KEY, b);
+  INSERT INTO t15(a,b) VALUES(10,'abc'),(20,'def'),(30,'ghi');
+  ALTER TABLE t15 ADD COLUMN c;
+  CREATE INDEX t15c ON t15(c);
+  INSERT INTO t15(a,b)
+   VALUES(5,'zyx'),(15,'wvu'),(25,'tsr'),(35,'qpo');
+  UPDATE t15 SET c=printf("y%d",a) WHERE c IS NULL;
+  SELECT a,b,c,'|' FROM t15 ORDER BY a;
+} {5 zyx y5 | 10 abc y10 | 15 wvu y15 | 20 def y20 | 25 tsr y25 | 30 ghi y30 | 35 qpo y35 |}
+
 
 finish_test