]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
New assert() statements to help prove correct usage of VdbeCursor objects.
authordrh <>
Thu, 11 Nov 2021 11:23:08 +0000 (11:23 +0000)
committerdrh <>
Thu, 11 Nov 2021 11:23:08 +0000 (11:23 +0000)
FossilOrigin-Name: 7cee62f77a9e7c3cf886f136e75a93c3bbbb88e48b66035883bea5503d9fc03c

manifest
manifest.uuid
src/vdbe.c
src/vdbeapi.c
src/vdbeaux.c
src/vdbeblob.c

index 8a498f5922ef6e671ed25660b57cd6d06570d15e..67a86c9784a1388770f1424b4212ddf8ef1d7395 100644 (file)
--- 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
index 0bc9833f7b77a91bd6baa67e92f017f34b32cdd4..873fed824ef3e7c68cc0942c8d79935596d4b128 100644 (file)
@@ -1 +1 @@
-8b53ffe99df6f5443bd22a9d95433819eb44c7e8f044c2f3e9d52661741d5612
\ No newline at end of file
+7cee62f77a9e7c3cf886f136e75a93c3bbbb88e48b66035883bea5503d9fc03c
\ No newline at end of file
index b2390e05672ea0bce10179a1b3f05d8a62c93652..b175c51646862ee4564429f6ab82067a8ec7c27c 100644 (file)
@@ -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;
index 5eeb5d1c0ec51e39a1c0deeb0f1b47f493f146eb..17df807de4c3703155923e7fc80aba99de859596 100644 (file)
@@ -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;
index 6e2fb7b19025ff8d32dbde5c531ee0a008dcccbd..1de6a9924527aae1ffe279278da805b291cae34b 100644 (file)
@@ -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)
   );
index 9cf6b5495e964d848a75923d900801261b2b3ff3..512442fd2a784a8edb140f33bb00f59c0fa568f7 100644 (file)
@@ -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
       );