From: drh <> Date: Thu, 11 Nov 2021 11:23:08 +0000 (+0000) Subject: New assert() statements to help prove correct usage of VdbeCursor objects. X-Git-Tag: version-3.37.0~36 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3ab4ffce1f2e3be98ca5d0896d92d70908d694e2;p=thirdparty%2Fsqlite.git New assert() statements to help prove correct usage of VdbeCursor objects. FossilOrigin-Name: 7cee62f77a9e7c3cf886f136e75a93c3bbbb88e48b66035883bea5503d9fc03c --- diff --git a/manifest b/manifest index 8a498f5922..67a86c9784 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Load\snew\stest\scases\sinto\stest/fuzzdata8.db -D 2021-11-10T15:23:00.325 +C New\sassert()\sstatements\sto\shelp\sprove\scorrect\susage\sof\sVdbeCursor\sobjects. +D 2021-11-11T11:23:08.228 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -622,12 +622,12 @@ F src/upsert.c 8789047a8f0a601ea42fa0256d1ba3190c13746b6ba940fe2d25643a7e991937 F src/utf.c ee39565f0843775cc2c81135751ddd93eceb91a673ea2c57f61c76f288b041a0 F src/util.c 30df8356e231dad33be10bb27897655002668343280004ba28c734489414a167 F src/vacuum.c 6c38ddc52f0619865c91dae9c441d4d48bf3040d7dc1bc5b22da1e45547ed0b3 -F src/vdbe.c 34a0bc8b9e934523fd528885689334821d7a1d7048e739a32801a810ac848c39 +F src/vdbe.c 81edf086e4884f99e03231ec3bfe78c90c94ea4f13a0a492efc7339178c4fd47 F src/vdbe.h 25dabb25c7e157b84e59260cfb5b466c3ac103ede9f36f4db371332c47601abe F src/vdbeInt.h 31fbabdc1ed61d9695337dfe5269ea94e1cf615c17f5cafeaa1bb01066820bab -F src/vdbeapi.c f4bd14b42d9717a35baac5f20c0c4bfccbf3691d64dc6ec02fc0ef19374d3c92 -F src/vdbeaux.c a57c760d1897f1b72f6fae26983df363db7a2c42d88721187e907f2c84862b42 -F src/vdbeblob.c 292e96c01c4219fca71d74e1002906d43eb232af4bd83f7552a3faec741f3eb8 +F src/vdbeapi.c 22c79072ae7d8a01e9bcae8ba16e918d60d202eaa9553b5fda38f99f7464d99a +F src/vdbeaux.c e1b2b66bf6444ec1c108ea5200157a83b48470cd00a8c5f7760d07793cdeffd9 +F src/vdbeblob.c 29c4118f7ee615cdee829e8401f6ead1b96b95d545b4de0042f6de39c962c652 F src/vdbemem.c a3d91dc9bb9ef725db77e4e9de7e1acef43192c9f8406c307665d503e3c2837c F src/vdbesort.c 513b481c8bab4a6578c92194a60cf3bc3b48736e4a53f8d2d7918121c5b594e7 F src/vdbetrace.c fe0bc29ebd4e02c8bc5c1945f1d2e6be5927ec12c06d89b03ef2a4def34bf823 @@ -1932,7 +1932,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 3feb0f1c3840904d28fc9a61262820e2b9b764addc1dd178aecc2cd0f952042c -R 1cdf4bc20eaeb0eb0948586b5fb86978 +P 8b53ffe99df6f5443bd22a9d95433819eb44c7e8f044c2f3e9d52661741d5612 +R e2a8f18e2779e9ff21f0f2d9c1d32f6b U drh -Z 87340a94cc4e7d9e4722384f4b564545 +Z b74eff6ed379bb9a94a26e84f3376dd5 diff --git a/manifest.uuid b/manifest.uuid index 0bc9833f7b..873fed824e 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -8b53ffe99df6f5443bd22a9d95433819eb44c7e8f044c2f3e9d52661741d5612 \ No newline at end of file +7cee62f77a9e7c3cf886f136e75a93c3bbbb88e48b66035883bea5503d9fc03c \ No newline at end of file diff --git a/src/vdbe.c b/src/vdbe.c index b2390e0567..b175c51646 100644 --- a/src/vdbe.c +++ b/src/vdbe.c @@ -7743,6 +7743,7 @@ case OP_VFilter: { /* jump */ pCur = p->apCsr[pOp->p1]; assert( memIsValid(pQuery) ); REGISTER_TRACE(pOp->p3, pQuery); + assert( pCur!=0 ); assert( pCur->eCurType==CURTYPE_VTAB ); pVCur = pCur->uc.pVCur; pVtab = pVCur->pVtab; @@ -7791,6 +7792,7 @@ case OP_VColumn: { sqlite3_context sContext; VdbeCursor *pCur = p->apCsr[pOp->p1]; + assert( pCur!=0 ); assert( pCur->eCurType==CURTYPE_VTAB ); assert( pOp->p3>0 && pOp->p3<=(p->nMem+1 - p->nCursor) ); pDest = &aMem[pOp->p3]; @@ -7844,6 +7846,7 @@ case OP_VNext: { /* jump */ VdbeCursor *pCur; pCur = p->apCsr[pOp->p1]; + assert( pCur!=0 ); assert( pCur->eCurType==CURTYPE_VTAB ); if( pCur->nullRow ){ break; diff --git a/src/vdbeapi.c b/src/vdbeapi.c index 5eeb5d1c0e..17df807de4 100644 --- a/src/vdbeapi.c +++ b/src/vdbeapi.c @@ -1850,6 +1850,7 @@ int sqlite3_preupdate_old(sqlite3 *db, int iIdx, sqlite3_value **ppValue){ u32 nRec; u8 *aRec; + assert( p->pCsr->eCurType==CURTYPE_BTREE ); nRec = sqlite3BtreePayloadSize(p->pCsr->uc.pCursor); aRec = sqlite3DbMallocRaw(db, nRec); if( !aRec ) goto preupdate_old_out; diff --git a/src/vdbeaux.c b/src/vdbeaux.c index 6e2fb7b190..1de6a99245 100644 --- a/src/vdbeaux.c +++ b/src/vdbeaux.c @@ -5214,6 +5214,8 @@ void sqlite3VdbePreUpdateHook( } } + assert( pCsr!=0 ); + assert( pCsr->eCurType==CURTYPE_BTREE ); assert( pCsr->nField==pTab->nCol || (pCsr->nField==pTab->nCol+1 && op==SQLITE_DELETE && iReg==-1) ); diff --git a/src/vdbeblob.c b/src/vdbeblob.c index 9cf6b5495e..512442fd2a 100644 --- a/src/vdbeblob.c +++ b/src/vdbeblob.c @@ -75,7 +75,10 @@ static int blobSeekToRow(Incrblob *p, sqlite3_int64 iRow, char **pzErr){ } if( rc==SQLITE_ROW ){ VdbeCursor *pC = v->apCsr[0]; - u32 type = pC->nHdrParsed>p->iCol ? pC->aType[p->iCol] : 0; + u32 type; + assert( pC!=0 ); + assert( pC->eCurType==CURTYPE_BTREE ); + type = pC->nHdrParsed>p->iCol ? pC->aType[p->iCol] : 0; testcase( pC->nHdrParsed==p->iCol ); testcase( pC->nHdrParsed==p->iCol+1 ); if( type<12 ){ @@ -420,6 +423,8 @@ static int blobReadWrite( */ sqlite3_int64 iKey; iKey = sqlite3BtreeIntegerKey(p->pCsr); + assert( v->apCsr[0]!=0 ); + assert( v->apCsr[0]->eCurType==CURTYPE_BTREE ); sqlite3VdbePreUpdateHook( v, v->apCsr[0], SQLITE_DELETE, p->zDb, p->pTab, iKey, -1, p->iCol );