From e46292a9203e83558353f285ee8fdc07667c01db Mon Sep 17 00:00:00 2001 From: drh <> Date: Mon, 5 Jul 2021 02:40:29 +0000 Subject: [PATCH] Improved rebustness in sqlite3ExprListDup() when it contains a vector assignment from an UPDATE where the initial term is omitted. This can happen during a UNION ALL query flattening while processing a virtual table update in which the first term of the vector is repeated. [forum:/forumpost/16ca0e9f32|Forum post 16ca0e9f32]. FossilOrigin-Name: 2547cfe38f8fb35109b3fc5bdfada387fe4b2b8a304156b704ab7f03f1f71198 --- manifest | 18 +++++++++--------- manifest.uuid | 2 +- src/expr.c | 24 ++++++++++++------------ src/treeview.c | 5 +++-- test/fuzzdata8.db | Bin 2502656 -> 2503680 bytes test/vtab1.test | 14 ++++++++++++++ 6 files changed, 39 insertions(+), 24 deletions(-) diff --git a/manifest b/manifest index aaed353b1f..fff16cfa52 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Ensure\sthat\sTK_SELECT_COLUMN\sExpr\snodes\salways\shave\stheir\siTable\sfield\sset\sto\nto\sthe\snumber\sof\scolumns\sin\sthe\svector.\sThis\sis\snot\sstrictly\snecessary.\sIt\njust\ssimplifies\sthe\sstate\sdescription\sand\smake\sthe\scode\seasier\sto\sreason\sabout. -D 2021-07-05T01:11:26.068 +C Improved\srebustness\sin\ssqlite3ExprListDup()\swhen\sit\scontains\sa\svector\sassignment\nfrom\san\sUPDATE\swhere\sthe\sinitial\sterm\sis\somitted.\s\sThis\scan\shappen\sduring\sa\nUNION\sALL\squery\sflattening\swhile\sprocessing\sa\svirtual\stable\supdate\sin\swhich\nthe\sfirst\sterm\sof\sthe\svector\sis\srepeated.\n[forum:/forumpost/16ca0e9f32|Forum\spost\s16ca0e9f32]. +D 2021-07-05T02:40:29.435 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -496,7 +496,7 @@ F src/date.c e0632f335952b32401482d099321bbf12716b29d6e72836b53ae49683ebae4bf F src/dbpage.c 8a01e865bf8bc6d7b1844b4314443a6436c07c3efe1d488ed89e81719047833a F src/dbstat.c 3aa79fc3aed7ce906e4ea6c10e85d657299e304f6049861fe300053ac57de36c F src/delete.c 62451bba9fe641159e9c0b7d9d2bab1c48d0cff11e16de2d14000603d2af1fcf -F src/expr.c 2d40c29e10ed37b1969ddb1616b598c30e318e8694686ab9209cbec31c310613 +F src/expr.c 5c532072d91855d1b91b2581c2d4447e517932713f583ed02020b7129f1cfbd7 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c e9063648396c58778f77583a678342fe4a9bc82436bf23c5f9f444f2df0fdaa4 F src/func.c c96ac6f7c4f2d684217c4673a80446e1b50e25b5ea79366f333f484622d010a0 @@ -609,7 +609,7 @@ F src/test_window.c cdae419fdcea5bad6dcd9368c685abdad6deb59e9fc8b84b153de513d394 F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9 F src/threads.c 4ae07fa022a3dc7c5beb373cf744a85d3c5c6c3c F src/tokenize.c bae853ad129d1129c063de8630a3e99e306283bc40146f359b1bb91be2c08f1e -F src/treeview.c f34b02f379a99bdfd24971810765fe0993e6aa2bcd7e3fa5af8a54f353b429fc +F src/treeview.c ce7a3da38caba094c78d888d2366f749ea33dc8cbafb04218b57768fb8669a6c F src/trigger.c 7d16aa09e63226b6d8b3f0fc60b21cbfa596fc406288b2ebcf4266633d1ba222 F src/update.c 56fa0458b1ffc1042629f926443e8ed44203983df3ab2b0db2ba556e6ceed68c F src/upsert.c df8f1727d62b5987c4fd302cd4d7c0c84ae57cd65683c5a34a740dfe24039235 @@ -1057,7 +1057,7 @@ F test/fuzzdata4.db b502c7d5498261715812dd8b3c2005bad08b3a26e6489414bd13926cd3e4 F test/fuzzdata5.db e35f64af17ec48926481cfaf3b3855e436bd40d1cfe2d59a9474cb4b748a52a5 F test/fuzzdata6.db 92a80e4afc172c24f662a10a612d188fb272de4a9bd19e017927c95f737de6d7 F test/fuzzdata7.db 0166b56fd7a6b9636a1d60ef0a060f86ddaecf99400a666bb6e5bbd7199ad1f2 -F test/fuzzdata8.db a44fe27989a002c0c9b554923ecf933b9f16750c1c0bb187a04f5beee0802aa6 +F test/fuzzdata8.db da92a0e336bf34ae89e407b375aaa57581b73b5f8f99b4de5e2557f64a3ca33c F test/fuzzer1.test 3d4c4b7e547aba5e5511a2991e3e3d07166cfbb8 F test/fuzzer2.test a85ef814ce071293bce1ad8dffa217cbbaad4c14 F test/fuzzerfault.test f64c4aef4c9e9edf1d6dc0d3f1e65dcc81e67c996403c88d14f09b74807a42bc @@ -1685,7 +1685,7 @@ F test/varint.test bbce22cda8fc4d135bcc2b589574be8410614e62 F test/veryquick.test 57ab846bacf7b90cf4e9a672721ea5c5b669b661 F test/view.test ea88361d5e9bc8eabf9f573185a16aea73a885be9b6c6a95ae84908913416a80 F test/view2.test db32c8138b5b556f610b35dfddd38c5a58a292f07fda5281eedb0851b2672679 -F test/vtab1.test 99c0c13b5336ca7f87f137459de144b2f396bb8563fbd602e46bfaa425e3d8cc +F test/vtab1.test e5760911437a97f5887f41ed37d6b124b2c4d8f7dc6ab4e08be8c0dff75b34e8 F test/vtab2.test 14d4ab26cee13ba6cf5c5601b158e4f57552d3b055cdd9406cf7f711e9c84082 F test/vtab3.test b45f47d20f225ccc9c28dc915d92740c2dee311e F test/vtab4.test 8e73ed268f3d596bc3590f45fc948fb40f28e9c3 @@ -1919,7 +1919,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 49829ae3229b7c7c7adeaa970a84aebd5157bc93b38fd6d80d86cc03f5fdde6f -R 074e3a063f98e309829563ef30773d9b +P 026f08d4cff19a95e0f38f2ef431cacd65c7c77ed92e30d7f2ded84651f47150 +R 370a07f45c8536f9b9e4e0469f767d7e U drh -Z 460e3b0de88173af039daa4e60e46cf6 +Z 4f1da44a75ffa77140a4f27e7fbced11 diff --git a/manifest.uuid b/manifest.uuid index e6480bc7f4..3ecd262408 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -026f08d4cff19a95e0f38f2ef431cacd65c7c77ed92e30d7f2ded84651f47150 \ No newline at end of file +2547cfe38f8fb35109b3fc5bdfada387fe4b2b8a304156b704ab7f03f1f71198 \ No newline at end of file diff --git a/src/expr.c b/src/expr.c index e5f02f0488..637ac9131a 100644 --- a/src/expr.c +++ b/src/expr.c @@ -1400,7 +1400,6 @@ static Expr *exprDup(sqlite3 *db, Expr *p, int dupFlags, u8 **pzBuffer){ if( !ExprHasProperty(p, EP_TokenOnly|EP_Leaf) ){ if( pNew->op==TK_SELECT_COLUMN ){ pNew->pLeft = p->pLeft; - assert( p->iColumn==0 || p->pRight==0 ); assert( p->pRight==0 || p->pRight==p->pLeft || ExprHasProperty(p->pLeft, EP_Subquery) ); }else{ @@ -1498,7 +1497,8 @@ ExprList *sqlite3ExprListDup(sqlite3 *db, ExprList *p, int flags){ ExprList *pNew; struct ExprList_item *pItem, *pOldItem; int i; - Expr *pPriorSelectCol = 0; + Expr *pPriorSelectColOld = 0; + Expr *pPriorSelectColNew = 0; assert( db!=0 ); if( p==0 ) return 0; pNew = sqlite3DbMallocRawNN(db, sqlite3DbMallocSize(db, p)); @@ -1515,17 +1515,17 @@ ExprList *sqlite3ExprListDup(sqlite3 *db, ExprList *p, int flags){ && pOldExpr->op==TK_SELECT_COLUMN && (pNewExpr = pItem->pExpr)!=0 ){ - assert( pNewExpr->iColumn==0 || i>0 ); - if( pNewExpr->iColumn==0 ){ - assert( pOldExpr->pLeft==pOldExpr->pRight - || ExprHasProperty(pOldExpr->pLeft, EP_Subquery) ); - pPriorSelectCol = pNewExpr->pLeft = pNewExpr->pRight; + if( pNewExpr->pRight ){ + pPriorSelectColOld = pOldExpr->pRight; + pPriorSelectColNew = pNewExpr->pRight; + pNewExpr->pLeft = pNewExpr->pRight; }else{ - assert( i>0 ); - assert( pItem[-1].pExpr!=0 ); - assert( pNewExpr->iColumn==pItem[-1].pExpr->iColumn+1 ); - assert( pPriorSelectCol==pItem[-1].pExpr->pLeft ); - pNewExpr->pLeft = pPriorSelectCol; + if( pOldExpr->pLeft!=pPriorSelectColOld ){ + pPriorSelectColOld = pOldExpr->pLeft; + pPriorSelectColNew = sqlite3ExprDup(db, pPriorSelectColOld, flags); + pNewExpr->pRight = pPriorSelectColNew; + } + pNewExpr->pLeft = pPriorSelectColNew; } } pItem->zEName = sqlite3DbStrDup(db, pOldItem->zEName); diff --git a/src/treeview.c b/src/treeview.c index b6f5c529d4..165ceb537a 100644 --- a/src/treeview.c +++ b/src/treeview.c @@ -699,8 +699,9 @@ void sqlite3TreeViewExpr(TreeView *pView, const Expr *pExpr, u8 moreToFollow){ break; } case TK_SELECT_COLUMN: { - sqlite3TreeViewLine(pView, "SELECT-COLUMN %d of [0..%d]", - pExpr->iColumn, pExpr->iTable-1); + sqlite3TreeViewLine(pView, "SELECT-COLUMN %d of [0..%d]%s", + pExpr->iColumn, pExpr->iTable-1, + pExpr->pRight==pExpr->pLeft ? " (SELECT-owner)" : ""); sqlite3TreeViewSelect(pView, pExpr->pLeft->x.pSelect, 0); break; } diff --git a/test/fuzzdata8.db b/test/fuzzdata8.db index 7e6764af0b237cb400f472116ec469a0fd9e8b91..f3a67bc7048bd937145827b4645940bd52ec2404 100644 GIT binary patch delta 38230 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

-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�e;Lb6R z_fDpgIG0w$&|ud?{&@Kenho`D&P%UkDFiUdE;k@1|ru_w=@42SC-sN?x}eynFv zhQ}2SepiCbmHdrk@8~s@dEA)~kcr8;j%4mk0{K%pP8LbCFnPV>5f$EXrVDj0Fd1iR zU2XVw&tup|7R-}6xgybW&)J*`&Nyd?FdJ`nSGrNJ^UmWMn9Hx)La4aRRrr)DVpN6r zz10g8{?Ktl#OixuF#kM{!hdrNg16Agl)cPhtV6z+ANdz4{4a-E^rMUnWjiwM|B8>y z$IQ(U`|8|w1pk&&UQp*lJX)D$jE|nvLi$p00K-rm(k}9bx4mS1{%rG_=9W zWz6cs!o_iXq7TbMU7ctlHy|uj+|igKJ6lt_+R5;*P8J(u&P9izRO@2J*D@-Z=dnV=-R#NR2KBF?;$tt%(r`3PL%T!zByvj^U?Ho#R^<5P*tVVB{!A)WNoE-!j z($uvd;1!-3d`y+iU9Ch|gQ*uIj?t-TS9cNCV(O)cAYxW`ON4b;6fdSzN`!N=$YWj{ zKOq;3l2|fTc7kOk#pp`GqzjIX%zwLvsl`{@jHj5bj@Ov|Uv}8(a5vWg0rD|5O-vvb zJU###y^4E>XHg@1vlzv9U5_A3u~@m+6^)fYd+K3Xmh%mY%5*&dv<-08!Uifj7EuIG zHL)_))k=T@EIJiY4+|5VMq~_Vj6WQ5S+LVBr=}oWG@^T`7)?6{yT*!uRQZh~8YpRz zOA8b~(sfgY5g3y0nksL4XOM3=tx0!1FUolgku=a!d7l-TkzXF*Q&p9Y4zKnb+YYRq z<4nc0J9>4UmOYJsBZ#3CBrxYuk|4(5;zO>bICGv$jm+!n=-hf&ya+p~c9C-zOEBJI zo_zFXmro5N=|-U|Oq7e*=6fh_tD~b|E9U<<*Y^0)-HYL$Ic{LFMbJ^<%P!^-{}00s z!P{766GEu|+pe1;?89WeI{}l9NBrbx6fs663Yz^f(Xr9dG4#%QS7(tcGwMW4 zG8r@&y&zCWk1u)z#@lu7VpLuV$i^FsB`1q?qMEi|bg|6u2+If~S!!Jt=BcKcv5~Jb z*D~L|jGs}8F*7ArzFl@zXk?a`|2U6RF`Nv^k+lMbZdWhkD3`Eyj52RY4{Ch_$}5QwIERc47+^tedqE5oW$hcooy&L z-m@19!aao?rG@_8PGPxE`iWzs7fTm5e)u^npr|{r= zoHqUKnkqm!7VU6_9I5YS!hIKG`ig-RBDwGI=jUptsy!5>b$`pR7!xKleTg%=ztBPk znw{>caz$PTUpg*!y3gt^&|F`dq6jl} zeP}>q_hAt}#+X{y0$S4Cy<7tqDJ|Z84(OxS?sjVaSl#x3dK4P(zO8{vm>k})IYoDM zuhjB4JgO(MnC0$)Qa^X7?(&AdJ{D5;2J^n2xGBNW$bWZ2yZgC^3UU=g_EU_R>wrZn-)OD`vUl;2LGzsYkTordX)B_qw6<6h4%5c3i} zov>+!yE8ucLY#?LGu$&MeZIR)4HGFm$88gIHxD)UO^{UIjCsnPAFDl)w9Drn=6}^$ z{+elmbs!Z_b`KF~?+W*DfLrJt;_goaSGr61HKKQfJC@qK;=Ull9V|MlZa_)94c&mI z=ebdUZ^%12fZp^0sHVKmGY06W4j(#iVoUHhB7H*-B-53`wkxx$9m`g$F%t z{FZT_Za(xR3;vg)aa)8ZmKN`KuK@S~!Q^=k51=O%(?4S#tbd8ysFf#4sy{4s&Anr6bgSq#Y}QX$Rj%HN>2JF0(feoI2_pQASM~U_Vzs|sqQ?z z+)KaWjxG4i{X~Aih93Q=jBl^iQFU|AE|&CKq)4i{>Soo-Z&<#?{mIj$;a`sRTTa^V zm>L=I34K=WZZ5(fB;9sD5#djY$x&|yN}n9ifK3e)L+IXj?m&JqS+vj1a-#e01|s~8 zsdpHsdT(~8Jyj#fPq4~iox`;%MJ%vM?btDD6=gJx+{X60B|0hkw(Dc& zfvdztd&1(mJzc4%(bGgIZR{B- z$kDl4MZ;)pYOXC7^P`M{+DXN3#GJiDi zrXZc7%v{d`z%9K3I?;ke&&vQ-gr({ySgn!5F#U)ajyW@#U8W~{-c*B~vL<`hiGE8c z?&BE*4$7L&!WHN!{K!F~dbw>loWGK_g)O)U# z9E~c#2k)zwQuR;|%dg#-`h#nI9WE(sZmS-6&A@#QSWnZDc9WlIBIq}x55(-&;YB_0-~OpPxUTOn23s7T7b-P zhVY#uF!dABj!Dtd*O;VLH^b;4PfucqU1It!NCxb+&T||hF>i|0<6k~ComtydHUB?2 z>V}jzLu$)>(S3IfS=vM{1MW-*LnH1^3$g5yI|H{I^Q@rNn>?}xW>Q|EXQn8Jv!zWj z>#BPgD*4iV${8IX3w3$<|%ayv8d1L->_Mp>N-^z#ZQW3s-;H1QeaI>sVV*V zvBxP=_@`nQpzc+kQ~Xgw_&M?zr9AXpdKRdr@x^V~$ACzTiuCNlq>1hhWcb2^{uj|6 z8R{@Z(6&E5)R!r#e)-S8Rb*Pv2O9bPNDONouqaV_lXl+rj259ImY;QvAZD0vi4c$F z^QCt&^Ak~r%J_g9I{kyEs{je)J@5XNInF%>{>)FWfGZrGM9RAC2@!FhJzx-aiVaxJ zJ3C?dr!G6WfAieeKr*X431OcAAs}0VAjp=Cpn@VKY@&h$M8pq}Bm;tq7!0ORQ4$nIMF z2X#%dIh6-v_GnsjK-G^a_aeFG1O_8JxL#*N@YF3fg;qotgg7YQm6(hJ(_Mu34~P+G z=l#n8r$DFfu7lPA#4Z;$l!}A+%((A47V?J< zgC!|9Fr+cuZDGSPxQwu%X#`)ymP1`97`qkYAE6ZhCI?+EJDY*&BU~Q|)*O;H0;dI1 zo+Aqj#mL!)jZiL}@Vxp@hV|QZy z55hc#p?h3~7B&j&dWw<->K##0|1$h*+)Q^tzD!|-0_}3fCCT{3G}k>2>w{v%FBwfS z`%TE2?b>O*of_mp<9xEwpgFEB{L#XqPi^xsuXD;=zB;sxg~r9n1hw;BTLm@_s{J$* z)w^xWv38NGlfcG<_K469(-*t;I;=Cv;3JzPIC1DRt_>FJ7~*m_m14I(Bu4Bo7tj6h$(LQz1%4T-?LMga!ZjC5 z_PHKrICzW8X3mSrD6Vxai4^?ug?UKa&cfZ{gSG>7#+ zVnk)L@Xdqo>~ghqPJc0~_+c?(o76i?Xt6(kp7x$AAWe)wcWwr<$LY+CNA-K@^hDJvGS`x9>%3k_f!k!{^)wr^#1=q zyyCuqwHI9hhQ>Fp44ajfWji{BTX!g84yY=0tB{!#84F8RyL({l53WXwmESZn7pv#H zOBgO|bWOFeN3eR4ySLDE_12T18tz0cV;)p5cIQD_QCwFj{~|IGD}QqhNBKc#tw)wzv+~lIs?x!8L;(21kdmXM< z@eaNqcyxuU_!0g#_djJwWgE$dySr0)q$sA}LYzC&J$C24 z7PbcSe|9Zk_}B~XhwWB7?b-)j@8Lf{_gCDHI$mFu8lo-3uJD_oR}0T_2UtzNH?X2E za*UWZoO+#OmYPLxV#Q~X53{BzTMv({bQeRjCGKUscpX-J9?9PtpX7c7 zrXI35@ysSS?fTc3=DT}C!G%OSlw_(-$bDCg!qHpYtL9~SmD1ZTPl*Y>&z*EYh^3U>pjhujXlbkL3F`;x0-t~Ww7 zL>+N=b#8uB4LQV!WBsl#{Rs0valgo{m83Z0J7?TClH$K5SaI-YZnUv?p#Nv?NjSOQ zy~Zw5SlN5!ZGlG}&2Yqb?qkfkwX|m_QjB8Ar5(sEC|Y zJ6Wrn^TT&X750;#~UL6F_$StUEGRbbp zmdwT zV!N8{?v*3?JzU2+11pteY|}$IB0!tUFt_6>mtK+=Xgv85ob5d1-{?(-+}284$T{h;V%}n< zT!3>ZC9?~dQlbbJw7)A|Vypr3x0BZfmMOIYy!fS*!kafjH7MygWV!OT0N=eYN#c*0 zfpkdUDrI1gUD6(YR>$^81~k|_$=GYJw3{E;O*=@Vt{&u5=4aT@Olgk;*C?B*7l|H| z>n|v;RZbJbPbG={3h{eAD)y*Uc9H8Gmzqarq>l|u;8XQCsL1meWiGiHxrst<63CKb zVdc57XZ#LDsh(EYu3q{?V1GdMUZoF?-lnV)pnkRz3+uOrtNn>`6&I#n40q`gR4=39 z>b{G6*>@L6gTJ79xzY`LHb@@`>~F{}Q?j9Ow-k@}A5@;E;ocr@c-b@%1ZtH!^k#d$ zw7`KsrLHW307-3)?Jr43__b$Cne5)=mA@941x^k0P#6(q3L^r@^-6y%%;hnmu#-%? zoG3X3+79<{1hk7#HOkW#1JUv!fmz|yDJ2EvIQd(F*-$=5>X${yHaMRwCowy0cv~U1 zDV(hX<%_&?g}r62qumMlUwNo=zwypRy`Z$PbtXgFBY_!mYp9o0I}W+T$Fg;flw^<0 z>`H}EknWK?J~LGP7IKHmG$Wb%7VSs>HhXQ4Mp;xzLc^aF;hyT}aX^Pz9&T8B4CH6Z zvP7J76jxK&QWp*`eH0*gmEh4U@% z7uLKvXcIjx$vr*fp5^y@yzqU0+07E5x~)p%s;V@uYX5NEM3jB%HN8$EOUquoAx-^& zG#N&kw19YzO55h)@*X=&fjKY88V-8dvxx#@y5a`!8V_II*6cigozUDPXesr9stHmg<`&3r3(N~U+VC2p60V`Z zjt)HUxRO`l)NDBc>Z24JdgjRA@K!9bo ze?dYbGoYfMl!k%MUYfGC7s3sE|HKlcSVHk?-A{5VFY!ag5Xl9#AteC0H*$oVuPiqe zN`;~tPfs38RH*DH`JwP7sX68>QYM+jEg^dWS*>cLAMiiVw;ikp|Tf&5>*>7Y)KL>$xLsi0zA zGIeYVHRDM8lW%zllX_f{(hl>JYH}>|BZ&9)!4?U3_Nyx7{ zK;tOMg`O>BR>+G~I^vz8cQxVgPPr9Jhnk0^biC7HQr;&@N2r<2DbXfnkK77AnkP}4 zI5U5MYINoRLNyXOrTmB-3ERggG8di!H491C`tzP>bmu8MO^M}Uxy5dT13RS*sQpIjfPj^=Ipfr^S7y>T82kT=1!eSD}AJv0OQL;QGeJ4{@o)R@f%z=1==t7@$h zgRRzHnK(B?Q6_=g_n%71P}NK^QR7v!WFX`ZqAAsoM-ew^qw0v?KCL!r8jas%X@l-wLJ)(Cd0 zk<&G^D`ao+B%;*S^PTyrjB`>O?9jt=SYW|xjgrNUatkc|o21kx%MMiga<0QbyDYUp z_W;lL0virX+fmT<3??H8w{}d2Q`0>ftQ+A;!QQ!^T>`revYX2-vCVMLQGwkK2bvM` z=QbzoAbj|M!h}Mh>U(7u-~8G~Kz6d+5%OkxMD(0fJ}`SU61Ll9gM&wN$U82X(6QDm zxdS%zr;_?IPYYBpD({=bJ0W|SCmYl@N&?4`H70Qs956_3W!g0;QYMs5_K2XhB)fmn zQr0)gs*5#2$TOxwqv1dsu5TMT8q-8|tI2E(WOpL5988eFgshea(;R9tN^{7b*8D&^ zt+(>*YB%)7so_~Q7M9-YNyE1DJ)iO;tU8ZOh`Y#hgr8m=xRE3@WRVsnOijQsi#;z3 zYyxDLZ^&81Yd&tT|Ch;M@kC@s78`DkVELggbw_J9m<-@R{ z4o4EJx`X1`z0~15e(`o~f(jbiM>tr}@L#0ix6bPnm>3DY|MvFf@PPbqY{OX2?-J)% z1ZsP!8{}GOHhQUDRg-$ zbS>cUkP5Z`AsjnCj}{1o5!CikjuNR&7(tYUaIA(?uEmCDP05Sk*dcC;N2N&k>TmDIPT&FNWH$l$$+Ps1;=Ti^=9LWR5B3RcP$%aYI9-+yV~RDz^ThALa{Xv z-%KXxTjBkRzmQvdJF%&cBGmZ28HMZri8;&65dS*FC(Fr@H_X!l>d#WV$+gKzO%POO z3Vj2z&nX0QYrKT?YoT@=aV}5gA^D^67{#WUxz0z?* z_FoS^6U|oZp)pma@!P`3uM*-r5E9h3p*~*)oF~j`8=&?fl9+QuA=6fI)4m0@vxzcF zP|0k&xY^!@Y^T~0KFpLmL7_u+aO`=?Y`u{tf+tWmi~?rXK`*UyH$m+}KF;@gTI1+i zTGg@5P@&1~xN<7r(6k97(Nl-LGX#cE_q!~C+LNYA&Qb41fo*}>QtneX%bDo)sn3{F z-k}wmOs-Pzt#jC#5fYV6#Z%>;pZViz_Iv2J4TCRx*8j7C>BL)Y$KV=HEb-9ptbUxV z!VXDl$xC*CHj0)VB^iniS@}vN-Zx%;M&N*C7VpGhrOB4I#oPxoT*u*veLFw1=y zJWBbpUuD{67)oEZAA=`6+bmd>s@%xf0SwlgYF)u1lkq_ep5{c3KtKr8krO|};CGyO zqN5Z=9Z>keUGSV)?aCIWFRQ^|gGnJE0s}0rMN`Cj9>nhsi>SlkZ)VLayB1T# z#}K^4gKuAj{QS_SpqE$Z$e9l!=7%vTa>`XqGWi_Apu;4-&xy0c#7{67Z4$2qCVr@C z{}h99X2}(7GOHiOU?L}8-Nf9)KEq%Nr=0kmg6-KuG;gnB6MshEehh=M$>j*Q0jM%r6e-PhqgD$?hl4t|UzS619tFrDfs#R}kNm0P^Z4b|XLG(=PEEH5l&M z*BBgNvJq$^9@rWteuJ9mp-NTTrC9iEr^G)dWB(R42PbkUa%N<9?8eVizC$gV6ZvMw z-Z8Tyk-kSQj*~d}I68Js&nMa$)Dk)EKuuV{S=3U@I)p$#2$aBy=TMV5F>Zgj(hsPq zW~1Zb{CU)Trd9+&KoHb|??EmEx^;x$GfGcvTQ7x|H4Uh>HFYBRu|^W15w(EH=xmtL zkEnI#`Mm8?3`d~^_7esRO)Hqdvn^chB5FO%W>>88GiX_!zmU}_7J>ajL78t|4lA^E z`4xjDX7g+D#tav~p*Gm$VGj?;@1W&+#^AVmrJO%4rw!+YSE0q+$o~m-w-T4@@a43H zT|#XXuUr1NWaV2Zllxz&<(U?_In4cU)W)0AlyLqsYLj^WDs=D#k0XL&o2l$nj%owA z=$58v2ZP`{-lR<~^$dTIPMg7-UYPFTtQ-Prvv{5ZMO1p`#Po522}BlAn`27MG$lH$ zs1;J4V+0fqkmEVchT42n%bwvncGMQ}{Q49xb>&90D-H*0i_QMsAC~7tt>l`nIU-S8 zW(vv)=c7Td74XY%h+H4!Ys7-;2jJ9Vqc^CJIwIlEy|FRybPu&QYUZQs{GsO7h{Y#{Kzc8=H>~Zc&auXo z_7BBlyI$(Y%o;=7;!(^}FAJfij5yA1=?yP;vMI+6>wSs-gDi6&9W z{K&!~aaEEqVAE6`oFaWMz|8%t*V_v8mt}f@ibRb^8K;9%(#PfHk%^8xKU0B%+HLapcKH@Hk3!mN)dvNi zt9-TKXw8|Y@Oo`%u(U`lS*;aVpqy#tkpHT>inT#;4fm^EU29?`X{@kmh6D@2s5B0W03*z*B>QV~`d(}kFupY^RPND3e zn%p#M2TZlQU~s-Vo;Yn*mzNz@9blUs*7z~9&MLClQ8hK(r0_4bkhFP;=0@QTRe>Gb z)jv3gZjilQodBMl>Q^}Ul#2X7P#dad@~4c|-IlV`YC@PnTpjPu=TTY=t~;aN%0T!| z^>I6qcuJ`&g<%$}v~G(|TzyIhv0*`U)~spiSF80ESD?d=Zf?)J>uE29%Kt;t9r_uJs7uI zJIc3Nj$2^qOSD^CwJ*soV!Ic zx0Q~Ouwk(J4p4|mX>y81ydSanX|dLdfhuZ!k(?xfu{&VhcJB7$wYQ;iwOR&e7m}W} zk81q7&HY*m?wY9eX6#O`KsTY8hSIiM(x<+3tJfww0_7EKWO}iIr>a{q0 zo zy|S&|64XnY6=&3IPnlm1zO40y0=-!@EdGLK?8$&GgGzg-y|Vtb;C!s}xXu|J106d;o}ve^hpO)p*yAYrxGqmX{An!}Tc_!t32ZUM zF+Cab{?yvz&29B}`76QkM>S#;AVzEnjOb1}{ndwzoHs!4f}zfOp}_bTi#e+j*f~Jg zp}aHc_f#LE)z04ckT?+hUp#fhAe#_Kf=r#sJFs)ef3WSRth_Z>*+AF zyWRo^4bZm;Y#G#g$>KHdTCLC_Q@3K;VEs5hyj+?=0?2FZP~S(7#LQg%puoz2<>)T- z4A;LA7{K>^bw9Qmp&#Q1lS^-5JuqvO{=N|P><#%d^Y59QKX&p2Q184 z4M!e|&H`bpd)N0}P#KOu=bY`cx!wzy8o1jE9WhIgFE-_-q5H4sQ)*RIXg7s}`xCPSX)Wdl6gx*GA@4(Vejb1Q#p0Sa(4aQnr zbxO~-uy^79LB`W$Mk5+mo!0Y(sIAkdPq=@^m>Ks>nE*?N8A)h-r;m18CG*)ylE6Rv z>e&9qLm@XdHtMk!D^h+3tS>jbP~bMcLC5dd{VAOox{1>9p}v%k4fUZkKa@@Bm{1m_cZGUWIxN(S(%evYO8bUx zpfoF#Nom(mXG&X#I#HS&N~bg-)Pd5-PiX}YG)gaqQYpO< z@>BX<$Vcf{A)V4MLK>wJuHq?_Mit)|5n=tg_#R5n7f+mO$BhV?6Fj zGkWmXqAT7qzQk|Z8Xkdt2&&(>1?m?tC*%oM5ie~vL$(zqmBLe(EuYuV27dXG>47N#;s7f+^|F9*Lwed)PaNZja*pwHC356 z-RKNEOZ4GbJH+_OCaPk@PX0oZ872MEB;}LU-9m~OvHu}1e>eZ11dclTeafT51kB1d zZlpEaLzWcGdebOjSIxp-9CaLpy42Kt_~9s{i}~{PF2lfkvl5dHbYEB^%o0cfn#yFtT1qYd=lWDLaZ1;$5Ct0qS5 z?#K0-%xGdbj?u3^{C&rc=@5Kge*^0OGAbbVO|4k`t!G2lA^koiCSbSv#E6$-cqrS;jrjfQ+>jwg9Po2xPnbqLO}{fxw_3le z?0~+WwqIm^b`BaNeYrS%t+8HUKS272`XJ1yG&b_DNVBm9?W*$(#8HjLJ&fOjDk7;} z?O=Y0-)WqWI!i1YdG9kaq2jP%K%CdO14`127*J!4=7>kQ7X}_N+Cs_?#!Ogwml41n zKN$1P==~#TZK?aUpBV#L*jF0r^czf@Bia0B23t=U=AQN^Y&>D)(iY0*n+u9)v_R!& z!)4ig(6~*sriu|Cb>JOe1huVFn?bW|qX+i>#@NoF@+D(1H{ovH{|5T~0_k@cyI}nx zV+fSQ7*=#2F}~+_HKw08RMNDqF#_j&W-PSux1=|5Uq4|icUaR1=kGRgi`({()nce6 zIcUs(5n9EpKU0-IvF2-|oux^E*7)ifV-$Z|njBO`-#OzXe_ML#Gc@B08jMo@aOQ@M zdJ=r}xiJkNzi2#cXA!V8#;5!%QZ&Q6|1wrs7=yZI6cY#zr*B&A`_sW%Lxt0KuT^+H zFVqU-B7NtX&2gE~LPRmzcUf>+1A#8)y&bT0sgZ?)<9ujmb_kAkBtc-7<6(R{#h2_9 z+ce!48TY6o2G44~L<_T(`Fwq?ZN-Qsv-vadU9rgLn>Ws0DGMc39BLN6VXN z$iFAP3~KKbJy`QfTswZBnsqIfwD�SPTSSkNX~f2>4nEEEckUkDZP4I{W7H2P(7v zihT^9?CP7zAE?Y?%{16qZ<)gH8c$;QYER!N8*7e{k4N%bfcyDgw_7`i5o^u&nKIEf z#P_>}e+br@1XBx|`7kZlM@!ij@WwD7O`hStE>2szHKORPdwBf}c=;~h8f(h)N+^KA z(Y|%eN_gjV!Q}=!g|j>#g)=wy{@Gq_f#)as;^Dl_5e4dRcD-zjo>cnq5xunFNPFmU zhh7A)FYxgPnw=8F-@;08*(Bdo+5=AVH7}j|?KFIJvTv@yJn-6|_S^B!0^b_`_+anAXrDfnVFy3bU5`XhD^RcYH!6P_-}7 zhLtb)hFMrEtoqza+u9PN#U1$KD&ICMzmNKto~B)K*&1IlbGF&qFVsIQ(_r z8;pN|#Mu_o+X>lR&tnXgb-vS#wZn?%#4+R~v6fq5z!%g-w*jL@w0y^3Z&>s z$VcBQ)&VM3i3xBXe9fWuuf!f)<7omEydv^L5oZ847)fm)?-SpxIDeaOp1{(PZEoSD z5LTAB2n#BF(-_*`_x&ZZPOltFBn(-ZIKsTr67SpRTW(>rky@3gLdgnoI23-GSZH3B z1C{MtJPo7Y_O0S}^+WCNi5t0!Kl9JgUTe*lSd&us@<8Y8f>pZ{OBwWh-Zz6Qc`K4? zFEN&hHQRmZ+?;}p!DGHIHfv`B-mp2LRPcAhKk9u}fxmq2ya8Eti=2OMRC^9%zVZFS zKV5sOeNvYu?GqW^^}X*E3+>4o-|{tM*X#N(b57;j^@PUFz5?h0zFkdvFXksR&R)>? zt}n=Mfl{y6z5E}qkj)O37nAsDx$`{A5_aDBkc59{>Q97iQ**ikI#lOkfXW{q| zMf9hJguCby{OQ*0cWj{yeg$ba-sQ=x+h);!U$pfGF=EvN)G`3&asDOF{!dK{brU02 z-c6)*m=y2NaP(VzTd1oT@ho3Hbi$+Y{+1Rit-_o)p_u5uY-aP zl&u&0-!BzXcs~Zgw9YA)Hn;K%{DZhnFTFy+lH}H?xAUK}upv0DN6P-Dt9hPbmZ6uWp9mNs+-w`N|;(foPv@R_HN=`c>OYJTcxs z6aO>WKi4Vt79(EecjBjG+nN4DjNQ3;mj4HlW#Rcb{&<0n-dyM(X0v9C5oLS~1Gwl> z|3i%BZC>P0Wc=3OC+;-KH$UdTWV7}aBNp9G`BW?@@mpvps97`0x5DzL{bLv#w|SYr z)MmYj2Jt~6`(WF1{yxsTAA2y=kDO%cRgw(-pZ9OE(hA-=3F0i)bJ(!LpI~SALhK!h zci`xk{i_9bABt=IGac6cV#M}v%aZMWHx|rITx>C~(1kH06W0^!J84(oyuU1}`K8U9 z{C7L71NgVucmt#cQ!Q57KscvC#qAayQ>*+*PU|2s;=PtsApwT%^FQgF`K&WEP>gsh znMf))_xoo!A9#9t=w>lu^*tt=*Z2ExWibWBX2yhZ_ocO*k=_#G)0-!ta?pR8KY=)> z$WAf7)(>{}5M=jA?hWl$yQ*FlKJyD~7K$hMs67k=#w616J;v(9G4=kJ?QAwySX0MX zV9p=@POyHoEgElhq>eV{+8nHKrv5@cTWyPjzw>QTm~`HMp0T-D5tGV4aoy-&$zQ!a zwZx@R#QQ?nfv0}<>lQW-ru`~B0dX%RXTrQuwuXP^0>6<*gmw1RTaW}kVRH-?BhL2B zc+~=RPbS^Y@0QAB_<|*MEVI(4%~=em{GuPT{%Em{)=cjtxKTZ9>(2fQzgt=8`Ywc= zwj42{Bs&AtwyAyi7dBN6+>fv66dEc<)ZUlz_vOo%;nV_0Cd_P}+B$l{bAv)d#E4B& z#+tA)K+62i2eycQk3z*WkvVvBdKAB@Cn=RyAPb>>Pm~H%M@4nQ+f!243TzP;#rS*- zR{lYY@(!NV!xr`!6diPC@NZ^(h&C-XF3Ng~7*X6Gs@kSL$uIJcc8nE^SaD1!h}+tx Z#xa(QAGS+<(rO(>)pGt-?Kjf+{{R{;LIVH* diff --git a/test/vtab1.test b/test/vtab1.test index 3d2e233366..0934ef502a 100644 --- a/test/vtab1.test +++ b/test/vtab1.test @@ -1558,4 +1558,18 @@ ifcapable fts3 { } } +# 2021-07-04 https://sqlite.org/forum/forumpost/16ca0e9f32 +# Yu Liang crash involving UPDATE on a virtual table with +# a duplicate column in a vector changeset and invoking the +# query flattener for UNION ALL. +# +reset_db +register_echo_module db +do_catchsql_test 25.0 { + CREATE TABLE t0(a); + CREATE VIRTUAL TABLE t1 USING echo(t0); + WITH t3(a) AS (SELECT * FROM t1 UNION ALL SELECT * FROM t1) + UPDATE t1 SET (a,a) = (SELECT 1, 0) FROM t3; +} {1 {target object/alias may not appear in FROM clause: t1}} + finish_test -- 2.47.3