]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Make the use and function of SQLITE_DYNAMIC clearer. Add assert() statement
authordrh <drh@noemail.net>
Thu, 19 Jan 2012 16:57:16 +0000 (16:57 +0000)
committerdrh <drh@noemail.net>
Thu, 19 Jan 2012 16:57:16 +0000 (16:57 +0000)
to help ensure that SQLITE_DYNAMIC is not misused.

FossilOrigin-Name: ab80f2c3b2f1eea6e35989d3e9b6137b51091754

manifest
manifest.uuid
src/sqliteInt.h
src/vdbemem.c

index b3a39eeed2cf48875399b536f8d850d0b7aef8c1..25f9813cda58da48cfeb9d92b14fa68458845881 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Avoid\soverriding\sthe\smalloc_usable_size\ssymbol\susing\sthe\sC\spreprocessor\sas\nthis\smight\sbe\sconfusing\sthe\sbuild\son\ssome\ssystems.
-D 2012-01-18T18:22:44.221
+C Make\sthe\suse\sand\sfunction\sof\sSQLITE_DYNAMIC\sclearer.\s\sAdd\sassert()\sstatement\nto\shelp\sensure\sthat\sSQLITE_DYNAMIC\sis\snot\smisused.
+D 2012-01-19T16:57:16.202
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in 3f79a373e57c3b92dabf76f40b065e719d31ac34
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -184,7 +184,7 @@ F src/select.c 2d45c1b7894fda3ba6f36996cc9f0dcfd2072ef1
 F src/shell.c f492df9fc2de27e4700ecbaa948729fc47af88d7
 F src/sqlite.h.in 53516617d2945a411d028674d7fa20dd394b9ec0
 F src/sqlite3ext.h 6904f4aadf976f95241311fbffb00823075d9477
-F src/sqliteInt.h b2bceb669152129283e4b7d6f699e0788a7fb5ec
+F src/sqliteInt.h 60d36e72f08029bc637f8d62c1f88a5df5089c70
 F src/sqliteLimit.h 164b0e6749d31e0daa1a4589a169d31c0dec7b3d
 F src/status.c 4568e72dfd36b6a5911f93457364deb072e0b03a
 F src/table.c 2cd62736f845d82200acfa1287e33feb3c15d62e
@@ -246,7 +246,7 @@ F src/vdbeInt.h ef9b8584b23b033894a0804dc6b90196c6779fb9
 F src/vdbeapi.c 3662b6a468a2a4605a15dfab313baa6dff81ad91
 F src/vdbeaux.c eb13a6917ed7455b5b49236fe5cfb3d3c3e4c57b
 F src/vdbeblob.c 32f2a4899d67f69634ea4dd93e3f651936d732cb
-F src/vdbemem.c 4f7d25d5ea2e2040254095b8f6de07f8dbbadf80
+F src/vdbemem.c 3c171040c28a95084fb5024ab731140a86fd5439
 F src/vdbesort.c 468d43c057063e54da4f1988b38b4f46d60e7790
 F src/vdbetrace.c d6e50e04e1ec498150e519058f617d91b8f5c843
 F src/vtab.c e9318d88feac85be8e27ee783ac8f5397933fc8a
@@ -987,7 +987,7 @@ F tool/tostr.awk e75472c2f98dd76e06b8c9c1367f4ab07e122d06
 F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
 F tool/warnings-clang.sh 9f406d66e750e8ac031c63a9ef3248aaa347ef2a
 F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381
-P 238e35a4411a5b2231576254dba39b802947d4f3
-R 2f9a38f200fa803aebab14874180ccba
+P bbaec351dd7784fd0af24b916110844176810f82
+R aa0aa0540224de8aa5787ea242d48be2
 U drh
-Z 16294f0096eebc0abb45ed8fd23fbf16
+Z 32d7eff19deb7325b14dd6d96fc6430e
index 2ef62dbef7e9c4cc889efb8d8e4edf9355aa1fc5..98e9210e09ea3fb97d2bde65801e9046d9739392 100644 (file)
@@ -1 +1 @@
-bbaec351dd7784fd0af24b916110844176810f82
\ No newline at end of file
+ab80f2c3b2f1eea6e35989d3e9b6137b51091754
\ No newline at end of file
index 9071bef4162c717d18b826042eb81864a36fee93..ba6980d2f49d52410cf63740bb420afeb4547e5f 100644 (file)
@@ -561,9 +561,13 @@ struct BusyHandler {
 
 /*
 ** The following value as a destructor means to use sqlite3DbFree().
-** This is an internal extension to SQLITE_STATIC and SQLITE_TRANSIENT.
+** The sqlite3DbFree() routine requires two parameters instead of the 
+** one parameter that destructors normally want.  So we have to introduce 
+** this magic value that the code knows to handle differently.  Any 
+** pointer will work here as long as it is distinct from SQLITE_STATIC
+** and SQLITE_TRANSIENT.
 */
-#define SQLITE_DYNAMIC   ((sqlite3_destructor_type)sqlite3DbFree)
+#define SQLITE_DYNAMIC   ((sqlite3_destructor_type)sqlite3MallocSize)
 
 /*
 ** When SQLITE_OMIT_WSD is defined, it means that the target platform does
index f8777a791d8efeded51bfa142c7be30cca4c0b18..994042e91a1578a6c37bf14575eb505949585112 100644 (file)
@@ -92,6 +92,7 @@ int sqlite3VdbeMemGrow(Mem *pMem, int n, int preserve){
     memcpy(pMem->zMalloc, pMem->z, pMem->n);
   }
   if( pMem->flags&MEM_Dyn && pMem->xDel ){
+    assert( pMem->xDel!=SQLITE_DYNAMIC );
     pMem->xDel((void *)(pMem->z));
   }
 
@@ -271,6 +272,7 @@ void sqlite3VdbeMemReleaseExternal(Mem *p){
     sqlite3VdbeMemRelease(p);
   }else if( p->flags&MEM_Dyn && p->xDel ){
     assert( (p->flags&MEM_RowSet)==0 );
+    assert( p->xDel!=SQLITE_DYNAMIC );
     p->xDel((void *)p->z);
     p->xDel = 0;
   }else if( p->flags&MEM_RowSet ){