diff options
author | drh <> | 2021-11-11 11:23:08 +0000 |
---|---|---|
committer | drh <> | 2021-11-11 11:23:08 +0000 |
commit | 3ab4ffce1f2e3be98ca5d0896d92d70908d694e2 (patch) | |
tree | 2343b904f9f1dae2736e67dd9e5782f16a01ee49 /src | |
parent | 34e71830de58302cd1922927234006e798374316 (diff) | |
download | sqlite-3ab4ffce1f2e3be98ca5d0896d92d70908d694e2.tar.gz sqlite-3ab4ffce1f2e3be98ca5d0896d92d70908d694e2.zip |
New assert() statements to help prove correct usage of VdbeCursor objects.
FossilOrigin-Name: 7cee62f77a9e7c3cf886f136e75a93c3bbbb88e48b66035883bea5503d9fc03c
Diffstat (limited to 'src')
-rw-r--r-- | src/vdbe.c | 3 | ||||
-rw-r--r-- | src/vdbeapi.c | 1 | ||||
-rw-r--r-- | src/vdbeaux.c | 2 | ||||
-rw-r--r-- | src/vdbeblob.c | 7 |
4 files changed, 12 insertions, 1 deletions
diff --git a/src/vdbe.c b/src/vdbe.c index b2390e056..b175c5164 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 5eeb5d1c0..17df807de 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 6e2fb7b19..1de6a9924 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 9cf6b5495..512442fd2 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 ); |