1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-08-07 02:42:48 +03:00

New compile-time option SQLITE_SECURE_DELETE takes care to overwrite deleted data with zeros. (CVS 3107)

FossilOrigin-Name: 614fac906807b8c75e04effc01666874d13ce636
This commit is contained in:
drh
2006-02-22 03:08:32 +00:00
parent e134ff1ea8
commit fcce93f62c
3 changed files with 25 additions and 8 deletions

View File

@@ -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) C New\scompile-time\soption\sSQLITE_SECURE_DELETE\stakes\scare\sto\soverwrite\sdeleted\sdata\swith\szeros.\s(CVS\s3107)
D 2006-02-18T16:36:45 D 2006-02-22T03:08:33
F Makefile.in 5d8dff443383918b700e495de42ec65bc1c8865b F Makefile.in 5d8dff443383918b700e495de42ec65bc1c8865b
F Makefile.linux-gcc 74ba0eadf88748a9ce3fd03d2a3ede2e6715baec F Makefile.linux-gcc 74ba0eadf88748a9ce3fd03d2a3ede2e6715baec
F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028 F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
@@ -34,7 +34,7 @@ F src/alter.c 451b34fc4eb2475ca76a2e86b21e1030a9428091
F src/analyze.c 7d2b7ab9a9c2fd6e55700f69064dfdd3e36d7a8a F src/analyze.c 7d2b7ab9a9c2fd6e55700f69064dfdd3e36d7a8a
F src/attach.c d73a3505de3fb9e373d0a158978116c4212031d0 F src/attach.c d73a3505de3fb9e373d0a158978116c4212031d0
F src/auth.c 9ae84d2d94eb96195e04515715e08e85963e96c2 F src/auth.c 9ae84d2d94eb96195e04515715e08e85963e96c2
F src/btree.c 23bbfb4745e549ca224f6c933a6e9bc106d77f56 F src/btree.c b4af2cff1e0f6815fca740ec094f564e9870792c
F src/btree.h 40055cfc09defd1146bc5b922399c035f969e56d F src/btree.h 40055cfc09defd1146bc5b922399c035f969e56d
F src/build.c f96e57e6a05c3e039c0dde9219d4a3753974d874 F src/build.c f96e57e6a05c3e039c0dde9219d4a3753974d874
F src/callback.c 1bf497306c32229114f826707054df7ebe10abf2 F src/callback.c 1bf497306c32229114f826707054df7ebe10abf2
@@ -354,7 +354,7 @@ F www/tclsqlite.tcl bb0d1357328a42b1993d78573e587c6dcbc964b9
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
F www/version3.tcl a99cf5f6d8bd4d5537584a2b342f0fb9fa601d8b F www/version3.tcl a99cf5f6d8bd4d5537584a2b342f0fb9fa601d8b
F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513 F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513
P 76912b33b1a15ee4baea9f7c8685933b4d551e91 P f8173e6aea8e90f64f5907f3f7ff4f34281f40da
R 51f0f5479b574a2964e0c830b22f5d2e R 9d6c9e65820f501eb557494790540e66
U drh U drh
Z b961471d43e1407a28289e616baefbcf Z 6bba2fc0555872ca4ae957a6ce0a202d

View File

@@ -1 +1 @@
f8173e6aea8e90f64f5907f3f7ff4f34281f40da 614fac906807b8c75e04effc01666874d13ce636

View File

@@ -9,7 +9,7 @@
** May you share freely, never taking more than you give. ** 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. ** This file implements a external (disk-based) database using BTrees.
** For a detailed discussion of BTrees, refer to ** 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 ); assert( (start + size)<=pPage->pBt->usableSize );
if( size<4 ) size = 4; 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 */ /* Add the space back into the linked list of freeblocks */
hdr = pPage->hdrOffset; hdr = pPage->hdrOffset;
addr = hdr + 1; addr = hdr + 1;
@@ -3879,6 +3885,15 @@ static int freePage(MemPage *pPage){
n = get4byte(&pPage1->aData[36]); n = get4byte(&pPage1->aData[36]);
put4byte(&pPage1->aData[36], n+1); 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 #ifndef SQLITE_OMIT_AUTOVACUUM
/* If the database supports auto-vacuum, write an entry in the pointer-map /* If the database supports auto-vacuum, write an entry in the pointer-map
** to indicate that the page is free. ** to indicate that the page is free.
@@ -3919,7 +3934,9 @@ static int freePage(MemPage *pPage){
if( rc ) return rc; if( rc ) return rc;
put4byte(&pTrunk->aData[4], k+1); put4byte(&pTrunk->aData[4], k+1);
put4byte(&pTrunk->aData[8+k*4], pPage->pgno); put4byte(&pTrunk->aData[8+k*4], pPage->pgno);
#ifndef SQLITE_SECURE_DELETE
sqlite3pager_dont_write(pBt->pPager, pPage->pgno); sqlite3pager_dont_write(pBt->pPager, pPage->pgno);
#endif
TRACE(("FREE-PAGE: %d leaf on trunk page %d\n",pPage->pgno,pTrunk->pgno)); TRACE(("FREE-PAGE: %d leaf on trunk page %d\n",pPage->pgno,pTrunk->pgno));
} }
releasePage(pTrunk); releasePage(pTrunk);