From 9524a7ea9f7c693bd03f8a0df3fdea0d441473d1 Mon Sep 17 00:00:00 2001 From: drh Date: Sun, 22 Dec 2019 18:06:49 +0000 Subject: [PATCH] When parsing a CREATE TABLE from the sqlite_master table, delete the CHECK constraints if there are any errors, since there might otherwise be attempts to use those CHECK constraints if PRAGMA writable_schema=ON is set. This undoes the fix in check-in [ea721b34477ab8b4] for a more general solution. FossilOrigin-Name: a982e6434cd66bfbe94d455f538bcbc4360b91572062d92acae6b77e9560e65d --- manifest | 18 +++++++++--------- manifest.uuid | 2 +- src/build.c | 6 ++++++ src/expr.c | 14 ++++---------- test/fuzzdata8.db | Bin 1570816 -> 1571840 bytes 5 files changed, 20 insertions(+), 20 deletions(-) diff --git a/manifest b/manifest index b880fbc55b..603feeb264 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Ensure\ssqlite3WindowRewrite()\sis\scalled\son\sa\sSELECT\sstatement\sbefore\sany\sterms\saremoved\sfrom\sit\sas\spart\sof\sIN()\sclause\sprocessing.\sFix\sfor\s[f00d096ca]. -D 2019-12-22T17:32:25.133 +C When\sparsing\sa\sCREATE\sTABLE\sfrom\sthe\ssqlite_master\stable,\sdelete\sthe\sCHECK\nconstraints\sif\sthere\sare\sany\serrors,\ssince\sthere\smight\sotherwise\sbe\sattempts\nto\suse\sthose\sCHECK\sconstraints\sif\sPRAGMA\swritable_schema=ON\sis\sset.\nThis\sundoes\sthe\sfix\sin\scheck-in\s[ea721b34477ab8b4]\sfor\sa\smore\sgeneral\nsolution. +D 2019-12-22T18:06:49.107 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -471,7 +471,7 @@ F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6 F src/btree.c 716fc9bd12eb7d35e3d66c5c2c81c37df3fdae49cd25bceaff4e7d702d513d80 F src/btree.h f27a33c49280209a93385e218306c4ee5f46ba8d7649d2f81a7166b282232484 F src/btreeInt.h 91806f01fd1145a9a86ba3042f25c38d8faf6002701bf5e780742cf88bcff437 -F src/build.c 358e894867394839679982d2fe320fb44fd17c94a87feb898aa066c15a8066ea +F src/build.c 1d999886fa656e6211e14d5402a6f92cadbdaa5d2f4f0597c797f7818d510e33 F src/callback.c 88615dfc0a82167b65b452b4b305dbf86be77200b3343c6ffc6d03e92a01d181 F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e F src/ctime.c 1b0724e66f95f33b160b1af85caaf9cceb325d22abf39bd24df4f54a73982251 @@ -479,7 +479,7 @@ F src/date.c e1d8ac7102f3f283e63e13867acb0efa33861cf34f0faf4cdbaf9fa7a1eb7041 F src/dbpage.c 135eb3b5e74f9ef74bde5cec2571192c90c86984fa534c88bf4a055076fa19b7 F src/dbstat.c 6c407e549406c10fde9ac3987f6d734459205239ad370369bc5fcd683084a4fa F src/delete.c a5c59b9c0251cf7682bc52af0d64f09b1aefc6781a63592c8f1136f7b73c66e4 -F src/expr.c d1031aaefc3d8697f30f418494ec491e729c2423af7f426041bb7525c41d3ad5 +F src/expr.c b7f3be57e7e6d2d93152cf9313e34f44fa74d3e1f16551c32dabb6be33365f41 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007 F src/fkey.c 92a248ec0fa4ed8ab60c98d9b188ce173aaf218f32e7737ba77deb2a684f9847 F src/func.c ed33e38cd642058182a31a3f518f2e34f4bbe53aa483335705c153c4d3e50b12 @@ -1017,7 +1017,7 @@ F test/fuzzdata4.db b502c7d5498261715812dd8b3c2005bad08b3a26e6489414bd13926cd3e4 F test/fuzzdata5.db e35f64af17ec48926481cfaf3b3855e436bd40d1cfe2d59a9474cb4b748a52a5 F test/fuzzdata6.db 92a80e4afc172c24f662a10a612d188fb272de4a9bd19e017927c95f737de6d7 F test/fuzzdata7.db e7a86fd83dda151d160445d542e32e5c6019c541b3a74c2a525b6ac640639711 -F test/fuzzdata8.db 0e29cbd9b2a34aadd76fb5be963e810f61545487ccb44503e5335acb1634338e +F test/fuzzdata8.db f8da99ea7e57a436e300e59b2d5ad0d0f765fcb0468b2c1b1f9b9f03d928e0ef F test/fuzzer1.test 3d4c4b7e547aba5e5511a2991e3e3d07166cfbb8 F test/fuzzer2.test a85ef814ce071293bce1ad8dffa217cbbaad4c14 F test/fuzzerfault.test 8792cd77fd5bce765b05d0c8e01b9edcf8af8536 @@ -1852,7 +1852,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 45748e2db028ffbda5d3e747493721a5a89af3fbc06823081a2f27f570e40e73 -R da73e6a7c2e1e070e501423e7260ad93 -U dan -Z 34811b059bbbc145cba165593b2e2e94 +P 8c856404b4e98d295449a4e89a41495dc007319a8e9c35c1a763718d7c5f67e8 +R 97d0a9b1a5feca02a10db862b5a0b13b +U drh +Z 7d30adc64d69bc3b030c80c2e1486537 diff --git a/manifest.uuid b/manifest.uuid index e796154ee8..c082951d96 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -8c856404b4e98d295449a4e89a41495dc007319a8e9c35c1a763718d7c5f67e8 \ No newline at end of file +a982e6434cd66bfbe94d455f538bcbc4360b91572062d92acae6b77e9560e65d \ No newline at end of file diff --git a/src/build.c b/src/build.c index 4fa27e5c50..0c8ec9304b 100644 --- a/src/build.c +++ b/src/build.c @@ -2243,6 +2243,12 @@ void sqlite3EndTable( */ if( p->pCheck ){ sqlite3ResolveSelfReference(pParse, p, NC_IsCheck, 0, p->pCheck); + if( pParse->nErr ){ + /* If errors are seen, delete the CHECK constraints now, else they might + ** actually be used if PRAGMA writable_schema=ON is set. */ + sqlite3ExprListDelete(db, p->pCheck); + p->pCheck = 0; + } } #endif /* !defined(SQLITE_OMIT_CHECK) */ #ifndef SQLITE_OMIT_GENERATED_COLUMNS diff --git a/src/expr.c b/src/expr.c index 21fa97d8ec..9603ff45e8 100644 --- a/src/expr.c +++ b/src/expr.c @@ -3649,11 +3649,6 @@ expr_code_doover: Table *pTab = pExpr->y.pTab; int iSrc; int iCol = pExpr->iColumn; - if( pTab==0 ){ - assert( CORRUPT_DB ); - sqlite3VdbeAddOp2(v, OP_Null, 0, target); - return target; - } assert( pTab!=0 ); assert( iCol>=XN_ROWID ); assert( iColnCol ); @@ -3722,10 +3717,9 @@ expr_code_doover: default: { /* Make NULL the default case so that if a bug causes an illegal ** Expr node to be passed into this function, it will be handled - ** sanely and not crash. This comes up, for example, if a corrupt - ** database schema is loaded using PRAGMA writable_schema=ON. */ - assert( op==TK_NULL || CORRUPT_DB ); - testcase( op!=TK_NULL ); + ** sanely and not crash. But keep the assert() to bring the problem + ** to the attention of the developers. */ + assert( op==TK_NULL ); sqlite3VdbeAddOp2(v, OP_Null, 0, target); return target; } @@ -3752,7 +3746,7 @@ expr_code_doover: sqlite3VdbeAddOp2(v, OP_Variable, pExpr->iColumn, target); if( pExpr->u.zToken[1]!=0 ){ const char *z = sqlite3VListNumToName(pParse->pVList, pExpr->iColumn); - assert( pExpr->u.zToken[0]=='?' || strcmp(pExpr->u.zToken, z)==0 ); + assert( pExpr->u.zToken[0]=='?' || (z && !strcmp(pExpr->u.zToken, z)) ); pParse->pVList[0] = 0; /* Indicate VList may no longer be enlarged */ sqlite3VdbeAppendP4(v, (char*)z, P4_STATIC); } diff --git a/test/fuzzdata8.db b/test/fuzzdata8.db index 15eb1017a4b1005d1ea1136c7ca2000b2b5a1841..8dd6e3a8f12d74bae0614e769de5a157e94cafbe 100644 GIT binary patch delta 4354 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 OQo!sP>{a9aU;hWJXrGh- -- 2.47.3