]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Make sure filenames passed into sqlite3OsOpen() always have the extra
authordrh <drh@noemail.net>
Tue, 3 Jan 2012 14:50:45 +0000 (14:50 +0000)
committerdrh <drh@noemail.net>
Tue, 3 Jan 2012 14:50:45 +0000 (14:50 +0000)
zero-terminators needed by sqlite3_uri_parameter().

FossilOrigin-Name: d73e93cfdc9441ade77b796dcdcf6eeb753cb398

manifest
manifest.uuid
src/os_unix.c
src/os_win.c
src/pager.c
src/util.c
src/vdbeaux.c

index 182ee598126b109eeee48d60e057e973f1c26bfc..10533ad79f3a8f8f13273a8dde9cf20578879674 100644 (file)
--- 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
index 44d90310307bb4efcc93b7d012af7082d9fe330f..9f17d9d5afb61e43bdb43a3bdd1f36a3ea2c8fd4 100644 (file)
@@ -1 +1 @@
-03d8362cd2cadab8e1cc5b18a3194152f2bd0a84
\ No newline at end of file
+d73e93cfdc9441ade77b796dcdcf6eeb753cb398
\ No newline at end of file
index 6542c0e66cd9feb2505a7ac36f5d33a178b7a0f5..e0a39882e136142f7c00b36c2909d265a17e9b4f 100644 (file)
@@ -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 ){
index 9ced7baaf01f2c20e2d91877f50bb2104b246bde..e570d7fba6d80edd6e9608ac33508dcffcbbfaa1 100644 (file)
@@ -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;
index 3640d462bb029624424bf99f6fcfbc5922e341d2..c57fe187451faf23a544c20808a4fe4a3750ad18 100644 (file)
@@ -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);
index fd3c858ab73358f8e6b112886c3b60c07cde919c..4a332a5e983ebdeba14aefec86265f392f713de0 100644 (file)
@@ -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
index 9e3a493283db9d6952d899e9ced9b2a6079a74bb..d5d27fd55785c428aca42e792dd928b5a2c69ead 100644 (file)
@@ -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;