From b0cbcd0edf4af5afa382ccdf18845ea9fe13e4a9 Mon Sep 17 00:00:00 2001 From: drh Date: Sat, 21 Dec 2019 14:09:30 +0000 Subject: [PATCH] When a corrupt schema is loaded using writable_schema=ON, the CHECK constraints (or other expressions in the table definition) might not be fully resolved. Ensure that the code generator can deal with this if the table is subsequently used in a DML statement. dbsqlfuzz find. FossilOrigin-Name: ea721b34477ab8b49d182352c4bc198245933b850e9b6248b4f97600e80bb44b --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/expr.c | 14 ++++++++++---- test/fuzzdata8.db | Bin 1564672 -> 1569792 bytes 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/manifest b/manifest index cda6e79652..7d2ddd7bc5 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Do\snot\stry\sto\saccess\sa\sgenerated\scolumn\sthrough\san\sindex\sif\sthe\scollating\nsequence\sfor\sthe\sgenerated\scolumn\sis\snon-standard.\nPart\s2\sof\sticket\s[e0a8120553f4b082] -D 2019-12-20T22:46:41.121 +C When\sa\scorrupt\sschema\sis\sloaded\susing\swritable_schema=ON,\sthe\sCHECK\sconstraints\n(or\sother\sexpressions\sin\sthe\stable\sdefinition)\smight\snot\sbe\sfully\sresolved.\nEnsure\sthat\sthe\scode\sgenerator\scan\sdeal\swith\sthis\sif\sthe\stable\sis\ssubsequently\nused\sin\sa\sDML\sstatement.\s\sdbsqlfuzz\sfind. +D 2019-12-21T14:09:30.906 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -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 f384985519fdc748d1c3e37b387825d601c2b076517c921db673b1dd368fe68c +F src/expr.c d1031aaefc3d8697f30f418494ec491e729c2423af7f426041bb7525c41d3ad5 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 bbe69fc3534e5e68ef211481e145aa9aac678dacb8dbc0c4f3177db0d40e099e +F test/fuzzdata8.db 34eb781c21f70c47501167b184a48a3fa8ff05ce9bc41b93dc48721e553c3c5e 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 728ad39e3bd07a2503a95c68ed5bbc3f28fd97551d59f12a5fab25dc68227e99 -R cfaa4a73c5ab8e91e0e8aea15aa1b6a1 +P 056bb8dcbdc45989c5c6e86d2966200062e3c01c382ec52aae37c828104b4496 +R 3d66cf80146322364a240ad41d3a3004 U drh -Z c7accbd12333ca8b3a817093296c39eb +Z d7946e0fe8abc0809f4706cc432866a0 diff --git a/manifest.uuid b/manifest.uuid index 357a08a153..f33a4854bd 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -056bb8dcbdc45989c5c6e86d2966200062e3c01c382ec52aae37c828104b4496 \ No newline at end of file +ea721b34477ab8b49d182352c4bc198245933b850e9b6248b4f97600e80bb44b \ No newline at end of file diff --git a/src/expr.c b/src/expr.c index e1efeba2b0..21fa97d8ec 100644 --- a/src/expr.c +++ b/src/expr.c @@ -3649,9 +3649,14 @@ 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( iColy.pTab->nCol ); + assert( iColnCol ); if( iCol<0 ){ return -1-pParse->iSelfTab; } @@ -3717,9 +3722,10 @@ 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. But keep an assert() to bring the problem - ** to the attention of the developers. */ - assert( op==TK_NULL ); + ** 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 ); sqlite3VdbeAddOp2(v, OP_Null, 0, target); return target; } diff --git a/test/fuzzdata8.db b/test/fuzzdata8.db index bf72ac52c27021e9af06290e2220452473e1386a..caba53a7744bca52e6dd45a8d54eda48e5d7a61d 100644 GIT binary patch delta 10605 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 p4!&lA_*{(m<-wb%dv -- 2.47.2