From: drh Date: Wed, 4 Dec 2019 15:08:58 +0000 (+0000) Subject: Ensure that an ALWAYS() in the rename logic really is always true, even X-Git-Tag: version-3.31.0~266 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d63b69b8a2fe0afbc62ffb850b7f17d4862244fa;p=thirdparty%2Fsqlite.git Ensure that an ALWAYS() in the rename logic really is always true, even for faulty inputs. FossilOrigin-Name: 54410f0e7710542d5159d0449898598d2b7f7676bfd993644ca47da1bf1fcdac --- diff --git a/manifest b/manifest index ee881de019..4945511d74 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\san\sassert()\sfailure\sthat\scould\soccur\sin\sALTER\sTABLE\scode\swhen\sthe\sschema\scontains\sa\sview\sthat\suses\sa\sCTE. -D 2019-12-04T14:26:38.017 +C Ensure\sthat\san\sALWAYS()\sin\sthe\srename\slogic\sreally\sis\salways\strue,\seven\nfor\sfaulty\sinputs. +D 2019-12-04T15:08:58.371 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -460,7 +460,7 @@ F spec.template 86a4a43b99ebb3e75e6b9a735d5fd293a24e90ca F sqlite.pc.in 42b7bf0d02e08b9e77734a47798d1a55a9e0716b F sqlite3.1 fc7ad8990fc8409983309bb80de8c811a7506786 F sqlite3.pc.in 48fed132e7cb71ab676105d2a4dc77127d8c1f3a -F src/alter.c 3101da361810ab2904b39e3c824ffd0770c77262d72bf97a7baba7e8b89cc3fe +F src/alter.c 8980e4d8c6fcc0ccf671e9d6e66e3ee8e3f6c01db6325d66b603960bb912175b F src/analyze.c b3ceec3fc052df8a96ca8a8c858d455dc5029ba681b4be98bb5c5a9162cfa58c F src/attach.c b30c44333d55a68c0a12920b5b9d40b254cbd3d4509bda77417209eeed8b3d80 F src/auth.c a3d5bfdba83d25abed1013a8c7a5f204e2e29b0c25242a56bc02bb0c07bf1e06 @@ -636,7 +636,7 @@ F test/altermalloc.test 167a47de41b5c638f5f5c6efb59784002b196fff70f98d9b4ed3cd74 F test/altermalloc2.test fa7b1c1139ea39b8dec407cf1feb032ca8e0076bd429574969b619175ad0174b F test/altertab.test 4d8b79b0b88b62b90b710390df14fe99e0a3578345526886eaa550e28e3065dc F test/altertab2.test 8883693952f6d7fb5f754dbf1d694ed780aa883027bef04cb1fb99a3b88c9272 -F test/altertab3.test 1456b08bd57b5cf978d5c275e08857e00d142cb7d2ba156c1fd360787d5fe06e +F test/altertab3.test 923db55712318c8942d83840ef7b2fcd328f255257b72f948b94a28aa52049db F test/amatch1.test b5ae7065f042b7f4c1c922933f4700add50cdb9f F test/analyze.test 547bb700f903107b38611b014ca645d6b5bb819f5210d7bf39c40802aafeb7d7 F test/analyze3.test 01f0b122e3e54ad2544f14f7cc7dcb4c2cb8753cad5e88c6b8d49615b3fd6a2b @@ -1851,7 +1851,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 e01fdbf9f700e1bd9dd5283c65547d10d26ce4f4506d3cfef9e1087aecdc2305 -R 28fab4726d1d7a83fe0fc43935cfad37 -U dan -Z 9893a89ad8b51bef2a7f272ffbfd52e9 +P 75b04a4b0d2e65bfcd02cf4e0b6d8f1954957c590814a9b8f9a9ee2adc2ec022 +R e6faf406d0181523009592ea4b4e2b75 +U drh +Z e9d70cfc329b6a3765e17c7dd1f5f7a2 diff --git a/manifest.uuid b/manifest.uuid index 916a9ff462..a083c30287 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -75b04a4b0d2e65bfcd02cf4e0b6d8f1954957c590814a9b8f9a9ee2adc2ec022 \ No newline at end of file +54410f0e7710542d5159d0449898598d2b7f7676bfd993644ca47da1bf1fcdac \ No newline at end of file diff --git a/src/alter.c b/src/alter.c index a42030649d..115127e247 100644 --- a/src/alter.c +++ b/src/alter.c @@ -757,6 +757,7 @@ static void renameWalkWith(Walker *pWalker, Select *pSelect){ static int renameUnmapSelectCb(Walker *pWalker, Select *p){ Parse *pParse = pWalker->pParse; int i; + if( pParse->nErr ) return WRC_Abort; if( ALWAYS(p->pEList) ){ ExprList *pList = p->pEList; for(i=0; inExpr; i++){ diff --git a/test/altertab3.test b/test/altertab3.test index 4df2b3c8bb..e352abc09a 100644 --- a/test/altertab3.test +++ b/test/altertab3.test @@ -465,5 +465,14 @@ foreach {tn v res} { } $res } +# Verify that the "if( pParse->nErr ) return WRC_Abort" at the top of the +# renameUnmapSelectCb() routine in alter.c (2019-12-04) is really required. +# +sqlite3 db :memory: +do_catchsql_test 20.10 { + CREATE TABLE s(a, b, c); + CREATE INDEX k ON s( (WITH s AS( SELECT * ) VALUES(2) ) IN () ); + ALTER TABLE s RENAME a TO a2; +} {1 {error in index k: no tables specified}} finish_test