From: drh Date: Tue, 3 Jan 2012 14:50:45 +0000 (+0000) Subject: Make sure filenames passed into sqlite3OsOpen() always have the extra X-Git-Tag: mountain-lion~8^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=52bcde0e2d73c73a16a05b8e6a637b60034e9b48;p=thirdparty%2Fsqlite.git Make sure filenames passed into sqlite3OsOpen() always have the extra zero-terminators needed by sqlite3_uri_parameter(). FossilOrigin-Name: d73e93cfdc9441ade77b796dcdcf6eeb753cb398 --- diff --git a/manifest b/manifest index 182ee59812..10533ad79f 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Remove\sthe\scode\sthat\sattempts\sto\sfind\sthe\ssector\ssize\sfrom\sthe\sOS\sand\nhardcode\sthe\sxSectorSize\smethods\sof\sthe\sunix\sand\swindows\sVFSes\sto\sreturn\nSQLITE_DEFAULT_SECTOR_SIZE,\swhich\sis\snow\sset\sto\s4096\sunless\soverridden. -D 2012-01-02T18:20:14.209 +C Make\ssure\sfilenames\spassed\sinto\ssqlite3OsOpen()\salways\shave\sthe\sextra\nzero-terminators\sneeded\sby\ssqlite3_uri_parameter(). +D 2012-01-03T14:50:45.695 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 5b4a3e12a850b021547e43daf886b25133b44c07 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -166,9 +166,9 @@ F src/os.c 519bdf7c608c4848024e1d87934f9305454145f4 F src/os.h c7d888830f168a9b681b3aec30789f4ad2445c17 F src/os_common.h 92815ed65f805560b66166e3583470ff94478f04 F src/os_os2.c 4a75888ba3dfc820ad5e8177025972d74d7f2440 -F src/os_unix.c 51acd5477f7c92321bbc665282a710556f19b4a7 -F src/os_win.c 0d3522dd0ad82b615748d4d391211af62b57ae03 -F src/pager.c a21a3191ab75310ea75bb61149e63b835f77f5f0 +F src/os_unix.c aff2f5e6632065dec09a53af1daf1e75fe12dce5 +F src/os_win.c f1057db64d481dffb15776147b06b15f4f8d7b87 +F src/pager.c 5b89ab92631a8fc488b87cc663ab064802173fec F src/pager.h 5cd760857707529b403837d813d86b68938d6183 F src/parse.y fabb2e7047417d840e6fdb3ef0988a86849a08ba F src/pcache.c f8043b433a57aba85384a531e3937a804432a346 @@ -238,13 +238,13 @@ F src/tokenize.c 1e86210d3976717a19238ea7b047fac481fe8c12 F src/trigger.c ee7e178fb9188f44b532cebd449a7c1df90fb684 F src/update.c d3076782c887c10e882996550345da9c4c9f9dea F src/utf.c 890c67dcfcc7a74623c95baac7535aadfe265e84 -F src/util.c 9e07bd67dfafe9c75b1da78c87ba030cebbb5388 +F src/util.c ad06374bc92b98071f221f00d553daea514f2b60 F src/vacuum.c 0c0ba2242355c6048d65e2b333abe0f7c06348fa F src/vdbe.c 50f0cf69eb64e11185042d15062bec8a1373a8a2 F src/vdbe.h 18f581cac1f4339ec3299f3e0cc6e11aec654cdb F src/vdbeInt.h 48c158b2fceca9682d1577e61c62da3c58cf0748 F src/vdbeapi.c 3662b6a468a2a4605a15dfab313baa6dff81ad91 -F src/vdbeaux.c 6b6c7acacdb47af51853b1f2a19a9b755ffe2aba +F src/vdbeaux.c 01fe6e35e5923c401a912b4662f0909d62453a1d F src/vdbeblob.c 32f2a4899d67f69634ea4dd93e3f651936d732cb F src/vdbemem.c 5e8c0831bd0a270ff81af385e891ff381dec900f F src/vdbesort.c 468d43c057063e54da4f1988b38b4f46d60e7790 @@ -986,7 +986,7 @@ F tool/tostr.awk e75472c2f98dd76e06b8c9c1367f4ab07e122d06 F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f F tool/warnings-clang.sh 9f406d66e750e8ac031c63a9ef3248aaa347ef2a F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381 -P da52e6e8b490508bc1ee4700aa45a79f398363da -R a0b8de10aeee04558967b4b25ead4061 +P 03d8362cd2cadab8e1cc5b18a3194152f2bd0a84 +R bab430cac57fc8357d76990e6c780f64 U drh -Z d686dcd0a4de73c84f2800d730af321e +Z 242be7d816ac09f954d1b623be157dd8 diff --git a/manifest.uuid b/manifest.uuid index 44d9031030..9f17d9d5af 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -03d8362cd2cadab8e1cc5b18a3194152f2bd0a84 \ No newline at end of file +d73e93cfdc9441ade77b796dcdcf6eeb753cb398 \ No newline at end of file diff --git a/src/os_unix.c b/src/os_unix.c index 6542c0e66c..e0a39882e1 100644 --- a/src/os_unix.c +++ b/src/os_unix.c @@ -3866,9 +3866,9 @@ static int unixOpenSharedMemory(unixFile *pDbFd){ } #ifdef SQLITE_SHM_DIRECTORY - nShmFilename = sizeof(SQLITE_SHM_DIRECTORY) + 30; + nShmFilename = sizeof(SQLITE_SHM_DIRECTORY) + 31; #else - nShmFilename = 5 + (int)strlen(pDbFd->zPath); + nShmFilename = 6 + (int)strlen(pDbFd->zPath); #endif pShmNode = sqlite3_malloc( sizeof(*pShmNode) + nShmFilename ); if( pShmNode==0 ){ diff --git a/src/os_win.c b/src/os_win.c index 9ced7baaf0..e570d7fba6 100644 --- a/src/os_win.c +++ b/src/os_win.c @@ -2466,7 +2466,7 @@ static int winOpenSharedMemory(winFile *pDbFd){ if( p==0 ) return SQLITE_IOERR_NOMEM; memset(p, 0, sizeof(*p)); nName = sqlite3Strlen30(pDbFd->zPath); - pNew = sqlite3_malloc( sizeof(*pShmNode) + nName + 15 ); + pNew = sqlite3_malloc( sizeof(*pShmNode) + nName + 16 ); if( pNew==0 ){ sqlite3_free(p); return SQLITE_IOERR_NOMEM; diff --git a/src/pager.c b/src/pager.c index 3640d462bb..c57fe18745 100644 --- a/src/pager.c +++ b/src/pager.c @@ -4407,9 +4407,9 @@ int sqlite3PagerOpen( ROUND8(pVfs->szOsFile) + /* The main db file */ journalFileSize * 2 + /* The two journal files */ nPathname + 1 + nUri + /* zFilename */ - nPathname + 8 + 1 /* zJournal */ + nPathname + 8 + 2 /* zJournal */ #ifndef SQLITE_OMIT_WAL - + nPathname + 4 + 1 /* zWal */ + + nPathname + 4 + 2 /* zWal */ #endif ); assert( EIGHT_BYTE_ALIGNMENT(SQLITE_INT_TO_PTR(journalFileSize)) ); @@ -4432,12 +4432,12 @@ int sqlite3PagerOpen( memcpy(pPager->zFilename, zPathname, nPathname); memcpy(&pPager->zFilename[nPathname+1], zUri, nUri); memcpy(pPager->zJournal, zPathname, nPathname); - memcpy(&pPager->zJournal[nPathname], "-journal", 8); + memcpy(&pPager->zJournal[nPathname], "-journal\000", 8+1); sqlite3FileSuffix3(pPager->zFilename, pPager->zJournal); #ifndef SQLITE_OMIT_WAL pPager->zWal = &pPager->zJournal[nPathname+8+1]; memcpy(pPager->zWal, zPathname, nPathname); - memcpy(&pPager->zWal[nPathname], "-wal", 4); + memcpy(&pPager->zWal[nPathname], "-wal\000", 4+1); sqlite3FileSuffix3(pPager->zFilename, pPager->zWal); #endif sqlite3_free(zPathname); diff --git a/src/util.c b/src/util.c index fd3c858ab7..4a332a5e98 100644 --- a/src/util.c +++ b/src/util.c @@ -1164,6 +1164,10 @@ int sqlite3AbsInt32(int x){ ** If SQLITE_ENABLE_8_3_NAMES is set to 2 at compile-time, then always ** do the suffix shortening regardless of URI parameter. ** +** Assume that zBaseFilename contains two \000 terminator bytes (so that +** it can be harmlessly passed into sqlite3_uri_parameter()) and copy both +** zero terminator bytes into the end of the revised name. +** ** Examples: ** ** test.db-journal => test.nal @@ -1172,6 +1176,7 @@ int sqlite3AbsInt32(int x){ ** test.db-mj7f3319fa => test.9fa */ void sqlite3FileSuffix3(const char *zBaseFilename, char *z){ + assert( zBaseFilename[strlen(zBaseFilename)+1]==0 ); #if SQLITE_ENABLE_8_3_NAMES<2 if( sqlite3_uri_boolean(zBaseFilename, "8_3_names", 0) ) #endif @@ -1179,7 +1184,7 @@ void sqlite3FileSuffix3(const char *zBaseFilename, char *z){ int i, sz; sz = sqlite3Strlen30(z); for(i=sz-1; i>0 && z[i]!='/' && z[i]!='.'; i--){} - if( z[i]=='.' && ALWAYS(sz>i+4) ) memmove(&z[i+1], &z[sz-3], 4); + if( z[i]=='.' && ALWAYS(sz>i+4) ) memmove(&z[i+1], &z[sz-3], 5); } } #endif diff --git a/src/vdbeaux.c b/src/vdbeaux.c index 9e3a493283..d5d27fd557 100644 --- a/src/vdbeaux.c +++ b/src/vdbeaux.c @@ -1839,7 +1839,7 @@ static int vdbeCommit(sqlite3 *db, Vdbe *p){ /* Select a master journal file name */ nMainFile = sqlite3Strlen30(zMainFile); - zMaster = sqlite3MPrintf(db, "%s-mjXXXXXX9XX", zMainFile); + zMaster = sqlite3MPrintf(db, "%s-mjXXXXXX9XXz", zMainFile); if( zMaster==0 ) return SQLITE_NOMEM; do { u32 iRandom;