From: drh Date: Mon, 23 Apr 2018 20:38:40 +0000 (+0000) Subject: Fix a problem in sqlite3ExprCompare() associated with UPSERT. X-Git-Tag: version-3.24.0~108 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f49ff6ffb3b60e3f2f9fe280e5580099e1443128;p=thirdparty%2Fsqlite.git Fix a problem in sqlite3ExprCompare() associated with UPSERT. FossilOrigin-Name: 67d0b2c15299dd20bca7254ecb33e71b5eee6024e2709bfdc36f877bf2a5679f --- diff --git a/manifest b/manifest index a2ac5501fa..36388173bc 100644 --- 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 diff --git a/manifest.uuid b/manifest.uuid index 0a01547adc..50a6469c52 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -a6356817815fe986c4d89475194e0537ebd46582d6df1034482bf08521182bdf \ No newline at end of file +67d0b2c15299dd20bca7254ecb33e71b5eee6024e2709bfdc36f877bf2a5679f \ No newline at end of file diff --git a/src/expr.c b/src/expr.c index 6997e8430f..670da03675 100644 --- a/src/expr.c +++ b/src/expr.c @@ -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; diff --git a/test/upsert1.test b/test/upsert1.test index c9139f1163..fffbe3e8bc 100644 --- a/test/upsert1.test +++ b/test/upsert1.test @@ -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