]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix a problem in sqlite3ExprCompare() associated with UPSERT.
authordrh <drh@noemail.net>
Mon, 23 Apr 2018 20:38:40 +0000 (20:38 +0000)
committerdrh <drh@noemail.net>
Mon, 23 Apr 2018 20:38:40 +0000 (20:38 +0000)
FossilOrigin-Name: 67d0b2c15299dd20bca7254ecb33e71b5eee6024e2709bfdc36f877bf2a5679f

manifest
manifest.uuid
src/expr.c
test/upsert1.test

index a2ac5501fa8712819280506d5224d4b379499891..36388173bcb9084c4e340d70f4f00106db0b25ec 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sa\sformatting\sissue\sin\sthe\sTreeView\soutput\sfor\sbare\sexpression\slists.
-D 2018-04-23T20:04:38.377
+C Fix\sa\sproblem\sin\ssqlite3ExprCompare()\sassociated\swith\sUPSERT.
+D 2018-04-23T20:38:40.741
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F Makefile.in 5ce9343cba9c189046f1afe6d2bcc1f68079439febc05267b98aec6ecc752439
@@ -444,7 +444,7 @@ F src/date.c ebe1dc7c8a347117bb02570f1a931c62dd78f4a2b1b516f4837d45b7d6426957
 F src/dbpage.c 8db4c97f630e7d83f884ea75caf1ffd0988c160e9d530194d93721c80821e0f6
 F src/dbstat.c edabb82611143727511a45ca0859b8cd037851ebe756ae3db289859dd18b6f91
 F src/delete.c b0f90749e22d5e41a12dbf940f4811138cf97da54b46b737089b93eb64a2896f
-F src/expr.c 53df437b3a4a404f039645919b2d6a56a2f59b9883e858940cd2a8858a25cd3d
+F src/expr.c d99ee5eed7feca54fc43ccf98f082d209325970aca2f7df97ec9f4705a384725
 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
 F src/fkey.c d617daf66b5515e2b42c1405b2b4984c30ca50fb705ab164271a9bf66c69e331
 F src/func.c 94f42cba2cc1c34aeaa441022ba0170ec3fec4bba54db4e0ded085c6dc0fdc51
@@ -1509,7 +1509,7 @@ F test/unixexcl.test d936ba2b06794018e136418addd59a2354eeae97
 F test/unordered.test ca7adce0419e4ca0c50f039885e76ed2c531eda8
 F test/update.test 1148de8d913e9817717990603aadeca07aab9ddbb10a30f167cbfd8d3a3ccb60
 F test/update2.test 5e67667e1c54017d964e626db765cf8bedcf87483c184f4c575bdb8c1dd2313e
-F test/upsert1.test 934315888a04b4e119ebb6abf558d92bf01d9f94fc8ff0bbc1c7c6015005340f
+F test/upsert1.test d587db593f131e112a98a05685c418e0eacc28df5905403e4ca04cd74c39a3fc
 F test/upsert2.test 9c3cdbb1a890227f6504ce4b0e3de68f4cdfa16bb21d8641208a9239896c5a09
 F test/upsert3.test 88d7d590a1948a9cb6eac1b54b0642f67a9f35a1fc0f19b200e97d5d39e3179c
 F test/upsert4.test 25d2a1da92f149331ae0c51ca6e3eee78189577585eab92de149900d62994fa5
@@ -1725,7 +1725,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 d3dad06ff1b163040c54dd215f30d6669cc2bc339001a362605f26f06eddf98c
-R 6a79ae3f9e3009be6a033ee247894fe2
+P a6356817815fe986c4d89475194e0537ebd46582d6df1034482bf08521182bdf
+R fe6fd22c7cdf5526786a828a2e820405
 U drh
-Z 779ffbf89adc6e5e826d930bfdb731f2
+Z c8b6a3bd0cfd45a9a813206f1c431636
index 0a01547adcd78faae2d6894f2822dde37c800bc4..50a6469c527f610acbc5007f63599395b047f372 100644 (file)
@@ -1 +1 @@
-a6356817815fe986c4d89475194e0537ebd46582d6df1034482bf08521182bdf
\ No newline at end of file
+67d0b2c15299dd20bca7254ecb33e71b5eee6024e2709bfdc36f877bf2a5679f
\ No newline at end of file
index 6997e8430f35a96311e5677d906124b52a28ce25..670da03675677cb5efd2fb2b39401e90a718769d 100644 (file)
@@ -4920,7 +4920,8 @@ int sqlite3ExprCompare(Parse *pParse, Expr *pA, Expr *pB, int iTab){
     if( sqlite3ExprCompare(pParse, pA->pLeft, pB->pLeft, iTab) ) return 2;
     if( sqlite3ExprCompare(pParse, pA->pRight, pB->pRight, iTab) ) return 2;
     if( sqlite3ExprListCompare(pA->x.pList, pB->x.pList, iTab) ) return 2;
-    if( ALWAYS((combinedFlags & EP_Reduced)==0) && pA->op!=TK_STRING ){
+    assert( (combinedFlags & EP_Reduced)==0 );
+    if( pA->op!=TK_STRING && pA->op!=TK_TRUEFALSE ){
       if( pA->iColumn!=pB->iColumn ) return 2;
       if( pA->iTable!=pB->iTable 
        && (pA->iTable!=iTab || NEVER(pB->iTable>=0)) ) return 2;
index c9139f1163998672b34971dc15bd40093576b11d..fffbe3e8bc4cb5c13fad740827174526f063ffa5 100644 (file)
@@ -103,5 +103,13 @@ do_execsql_test upsert1-410 {
   SELECT a, b FROM t2 ORDER BY a;
 } {four 1 one 3 three 2 two 1}
 
+# Problem found by AFL prior to any release
+do_execsql_test upsert1-500 {
+  DROP TABLE t1;
+  CREATE TABLE t1(x INTEGER PRIMARY KEY, y INT UNIQUE);
+  INSERT INTO t1(x,y) SELECT 1,2 WHERE true
+    ON CONFLICT(x) DO UPDATE SET y=max(t1.y,excluded.y) AND true;
+  SELECT * FROM t1;
+} {1 2}
 
 finish_test