Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Changes In Branch invalid-unicode Excluding Merge-Ins
This is equivalent to a diff from fe453a4893 to 9242c09ff9
2012-11-25
| ||
11:50 | Disallow invalid unicode characters in filenames. check-in: 897dfa48b4 user: drh tags: trunk | |
2012-11-23
| ||
19:33 | some unnecessary spacing check-in: d13143eb3b user: jan.nijtmans tags: trunk | |
15:57 | All markup of the form ... with an options "links" or "links=BOOLEAN" attribute. Improved TH1 tracing and error reporting capabilities. Improved documentation on how reports work. check-in: 23c75abde4 user: drh tags: ticket-enhancements | |
11:29 | merge trunk "filename contains illegal characters" is now a warning check-in: d3bee356ba user: jan.nijtmans tags: ticket-d17d6e5b17 | |
10:35 | Disallow invalid unicode characters Closed-Leaf check-in: 9242c09ff9 user: jan.nijtmans tags: invalid-unicode | |
01:50 | When db_open_config() is called with the useAttach parameter set to non-zero, it may need to close and reopen the database using ATTACH if that was not done previously. check-in: fe453a4893 user: drh tags: trunk | |
2012-11-22
| ||
23:35 | Be consistent about display of check-in comments as either text/plain or text/x-fossil-wiki. When the user configures text/plain, use that format everywhere. check-in: 2c6fa9c3b0 user: drh tags: trunk | |
10:16 | Modify db_open_config() and associated routines to make their internal state more consistent and discoverable. Closed-Leaf check-in: 52a6868700 user: mistachkin tags: dbOpenConfig | |
Changes to src/add.c.
136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 |
static int add_one_file(
const char *zPath, /* Tree-name of file to add. */
int vid, /* Add to this VFILE */
int caseSensitive /* True if filenames are case sensitive */
){
const char *zCollate = caseSensitive ? "binary" : "nocase";
if( !file_is_simple_pathname(zPath) ){
fossil_fatal("filename contains illegal characters: %s", zPath);
}
if( db_exists("SELECT 1 FROM vfile"
" WHERE pathname=%Q COLLATE %s", zPath, zCollate) ){
db_multi_exec("UPDATE vfile SET deleted=0"
" WHERE pathname=%Q COLLATE %s", zPath, zCollate);
}else{
char *zFullname = mprintf("%s%s", g.zLocalRoot, zPath);
|
| > |
136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
static int add_one_file( const char *zPath, /* Tree-name of file to add. */ int vid, /* Add to this VFILE */ int caseSensitive /* True if filenames are case sensitive */ ){ const char *zCollate = caseSensitive ? "binary" : "nocase"; if( !file_is_simple_pathname(zPath) ){ fossil_warning("filename contains illegal characters: %s", zPath); return 0; } if( db_exists("SELECT 1 FROM vfile" " WHERE pathname=%Q COLLATE %s", zPath, zCollate) ){ db_multi_exec("UPDATE vfile SET deleted=0" " WHERE pathname=%Q COLLATE %s", zPath, zCollate); }else{ char *zFullname = mprintf("%s%s", g.zLocalRoot, zPath); |
Changes to src/checkout.c.
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
ManifestFile *pFile;
/* Check the EXE permission status of all files
*/
pManifest = manifest_get(vid, CFTYPE_MANIFEST);
if( pManifest==0 ) return;
blob_zero(&filename);
blob_appendf(&filename, "%s/", g.zLocalRoot);
baseLen = blob_size(&filename);
manifest_file_rewind(pManifest);
while( (pFile = manifest_file_next(pManifest, 0))!=0 ){
int isExe;
blob_append(&filename, pFile->zName, -1);
isExe = pFile->zPerm && strstr(pFile->zPerm, "x");
file_wd_setexe(blob_str(&filename), isExe);
|
| |
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
ManifestFile *pFile; /* Check the EXE permission status of all files */ pManifest = manifest_get(vid, CFTYPE_MANIFEST); if( pManifest==0 ) return; blob_zero(&filename); blob_appendf(&filename, "%s", g.zLocalRoot); baseLen = blob_size(&filename); manifest_file_rewind(pManifest); while( (pFile = manifest_file_next(pManifest, 0))!=0 ){ int isExe; blob_append(&filename, pFile->zName, -1); isExe = pFile->zPerm && strstr(pFile->zPerm, "x"); file_wd_setexe(blob_str(&filename), isExe); |
Changes to src/db.c.
1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 |
}
/* Attempt to read value from file in checkout if there wasn't a cache hit
** and a checkout is open. */
if( cacheEntry==0 ){
Blob versionedPathname;
char *zVersionedPathname;
blob_zero(&versionedPathname);
blob_appendf(&versionedPathname, "%s/.fossil-settings/%s",
g.zLocalRoot, zName);
zVersionedPathname = blob_str(&versionedPathname);
if( file_size(zVersionedPathname)>=0 ){
/* File exists, and contains the value for this setting. Load from
** the file. */
Blob setting;
blob_zero(&setting);
|
| |
1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 |
} /* Attempt to read value from file in checkout if there wasn't a cache hit ** and a checkout is open. */ if( cacheEntry==0 ){ Blob versionedPathname; char *zVersionedPathname; blob_zero(&versionedPathname); blob_appendf(&versionedPathname, "%s.fossil-settings/%s", g.zLocalRoot, zName); zVersionedPathname = blob_str(&versionedPathname); if( file_size(zVersionedPathname)>=0 ){ /* File exists, and contains the value for this setting. Load from ** the file. */ Blob setting; blob_zero(&setting); |
Changes to src/file.c.
493 494 495 496 497 498 499 500 501 502 503 504 505 506 |
char c = z[0]; if( c=='/' || c==0 ) return 0; if( c=='.' ){ if( z[1]=='/' || z[1]==0 ) return 0; if( z[1]=='.' && (z[2]=='/' || z[2]==0) ) return 0; } for(i=0; (c=z[i])!=0; i++){ if( c=='\\' || c=='*' || c=='[' || c==']' || c=='?' ){ return 0; } if( c=='/' ){ if( z[i+1]=='/' ) return 0; if( z[i+1]=='.' ){ if( z[i+2]=='/' || z[i+2]==0 ) return 0; |
> > > > > > > > > > > > > > > > > > > > > > > > > |
493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 |
char c = z[0]; if( c=='/' || c==0 ) return 0; if( c=='.' ){ if( z[1]=='/' || z[1]==0 ) return 0; if( z[1]=='.' && (z[2]=='/' || z[2]==0) ) return 0; } for(i=0; (c=z[i])!=0; i++){ if( (c & 0xf0) == 0xf0 ) { /* Unicode characters > U+FFFF are not supported. * Windows XP and earlier cannot handle them. */ return 0; } if( (c & 0xf0) == 0xe0 ) { /* This is a 3-byte UTF-8 character */ if ( (c & 0xfe) == 0xee ){ /* Range U+E000 - U+FFFF (Starting with 0xee or 0xef in UTF-8 ) */ if ( (c & 1) && ((z[i+1] & 0xff) >= 0xa4) ){ /* But exclude U+F900 - U+FFFF (0xef followed by byte >= 0xa4), * which contain valid characters. */ continue; } /* Unicode character in the range U+E000 - U+F8FF are for * private use, they shouldn't occur in filenames. */ return 0; } if( ((c & 0xff) == 0xed) && ((z[i+1] & 0xe0) == 0xa0) ){ /* Unicode character in the range U+D800 - U+DFFF are for * surrogate pairs, they shouldn't occur in filenames. */ return 0; } } if( c=='\\' || c=='*' || c=='[' || c==']' || c=='?' ){ return 0; } if( c=='/' ){ if( z[i+1]=='/' ) return 0; if( z[i+1]=='.' ){ if( z[i+2]=='/' || z[i+2]==0 ) return 0; |