aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordrh <>2021-11-11 11:23:08 +0000
committerdrh <>2021-11-11 11:23:08 +0000
commit3ab4ffce1f2e3be98ca5d0896d92d70908d694e2 (patch)
tree2343b904f9f1dae2736e67dd9e5782f16a01ee49 /src
parent34e71830de58302cd1922927234006e798374316 (diff)
downloadsqlite-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.c3
-rw-r--r--src/vdbeapi.c1
-rw-r--r--src/vdbeaux.c2
-rw-r--r--src/vdbeblob.c7
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
);