diff --git a/manifest b/manifest index 57afd0690c..ee460e510a 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Always\sgenerate\scode,\seven\sif\sit\sis\sa\sno-op,\sfor\sCREATE\sand\sDROP\sstatements\nthat\suse\sthe\sIF\sEXISTS\sor\sIF\sNOT\sEXISTS\sclause.\s(CVS\s3106) -D 2006-02-18T16:36:45 +C New\scompile-time\soption\sSQLITE_SECURE_DELETE\stakes\scare\sto\soverwrite\sdeleted\sdata\swith\szeros.\s(CVS\s3107) +D 2006-02-22T03:08:33 F Makefile.in 5d8dff443383918b700e495de42ec65bc1c8865b F Makefile.linux-gcc 74ba0eadf88748a9ce3fd03d2a3ede2e6715baec F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028 @@ -34,7 +34,7 @@ F src/alter.c 451b34fc4eb2475ca76a2e86b21e1030a9428091 F src/analyze.c 7d2b7ab9a9c2fd6e55700f69064dfdd3e36d7a8a F src/attach.c d73a3505de3fb9e373d0a158978116c4212031d0 F src/auth.c 9ae84d2d94eb96195e04515715e08e85963e96c2 -F src/btree.c 23bbfb4745e549ca224f6c933a6e9bc106d77f56 +F src/btree.c b4af2cff1e0f6815fca740ec094f564e9870792c F src/btree.h 40055cfc09defd1146bc5b922399c035f969e56d F src/build.c f96e57e6a05c3e039c0dde9219d4a3753974d874 F src/callback.c 1bf497306c32229114f826707054df7ebe10abf2 @@ -354,7 +354,7 @@ F www/tclsqlite.tcl bb0d1357328a42b1993d78573e587c6dcbc964b9 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0 F www/version3.tcl a99cf5f6d8bd4d5537584a2b342f0fb9fa601d8b F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513 -P 76912b33b1a15ee4baea9f7c8685933b4d551e91 -R 51f0f5479b574a2964e0c830b22f5d2e +P f8173e6aea8e90f64f5907f3f7ff4f34281f40da +R 9d6c9e65820f501eb557494790540e66 U drh -Z b961471d43e1407a28289e616baefbcf +Z 6bba2fc0555872ca4ae957a6ce0a202d diff --git a/manifest.uuid b/manifest.uuid index 0075709b24..ec836b6ee4 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -f8173e6aea8e90f64f5907f3f7ff4f34281f40da \ No newline at end of file +614fac906807b8c75e04effc01666874d13ce636 \ No newline at end of file diff --git a/src/btree.c b/src/btree.c index 6aa365865b..bf7e0b04de 100644 --- a/src/btree.c +++ b/src/btree.c @@ -9,7 +9,7 @@ ** May you share freely, never taking more than you give. ** ************************************************************************* -** $Id: btree.c,v 1.314 2006/02/11 01:25:51 drh Exp $ +** $Id: btree.c,v 1.315 2006/02/22 03:08:33 drh Exp $ ** ** This file implements a external (disk-based) database using BTrees. ** For a detailed discussion of BTrees, refer to @@ -1273,6 +1273,12 @@ static void freeSpace(MemPage *pPage, int start, int size){ assert( (start + size)<=pPage->pBt->usableSize ); if( size<4 ) size = 4; +#ifdef SQLITE_SECURE_DELETE + /* Overwrite deleted information with zeros when the SECURE_DELETE + ** option is enabled at compile-time */ + memset(&data[start], 0, size); +#endif + /* Add the space back into the linked list of freeblocks */ hdr = pPage->hdrOffset; addr = hdr + 1; @@ -3879,6 +3885,15 @@ static int freePage(MemPage *pPage){ n = get4byte(&pPage1->aData[36]); put4byte(&pPage1->aData[36], n+1); +#ifdef SQLITE_SECURE_DELETE + /* If the SQLITE_SECURE_DELETE compile-time option is enabled, then + ** always fully overwrite deleted information with zeros. + */ + rc = sqlite3pager_write(pPage->aData); + if( rc ) return rc; + memset(pPage->aData, 0, pPage->pBt->pageSize); +#endif + #ifndef SQLITE_OMIT_AUTOVACUUM /* If the database supports auto-vacuum, write an entry in the pointer-map ** to indicate that the page is free. @@ -3919,7 +3934,9 @@ static int freePage(MemPage *pPage){ if( rc ) return rc; put4byte(&pTrunk->aData[4], k+1); put4byte(&pTrunk->aData[8+k*4], pPage->pgno); +#ifndef SQLITE_SECURE_DELETE sqlite3pager_dont_write(pBt->pPager, pPage->pgno); +#endif TRACE(("FREE-PAGE: %d leaf on trunk page %d\n",pPage->pgno,pTrunk->pgno)); } releasePage(pTrunk);