Diff
Not logged in

Differences From Artifact [f489af46d5]:

To Artifact [f25c47f1a3]:


1280
1281
1282
1283
1284
1285
1286
1287
1288




1289

1290
1291
1292
1293


1294
1295




1296


1297

1298

1299
1300


1301
1302
1303
1304
1305
1306
1307
1280
1281
1282
1283
1284
1285
1286


1287
1288
1289
1290
1291
1292
1293
1294


1295
1296


1297
1298
1299
1300
1301
1302
1303
1304
1305

1306


1307
1308
1309
1310
1311
1312
1313
1314
1315







-
-
+
+
+
+

+


-
-
+
+
-
-
+
+
+
+

+
+

+
-
+
-
-
+
+








    i = zPathInfo[0]!=0;
    while( 1 ){
      while( zPathInfo[i] && zPathInfo[i]!='/' ){ i++; }
      zRepo = zToFree = mprintf("%s%.*s.fossil",g.zRepositoryName,i,zPathInfo);

      /* To avoid mischief, make sure the repository basename contains no
      ** characters other than alphanumerics, "-", "/", "_", and "." beside
      ** "/" or ".".
      ** characters other than alphanumerics, "/", "_", "-", and ".", and
      ** that "-" never occurs immediately after a "/" and that "." is always
      ** surrounded by two alphanumerics.  Any character that does not 
      ** satisfy these constraints is converted into "_".
      */
      szFile = 0;
      for(j=strlen(g.zRepositoryName)+1, k=0; zRepo[j] && k<i-1; j++, k++){
        char c = zRepo[j];
        if( !fossil_isalnum(c) && c!='-' && c!='/'
         && (c!='.' || zRepo[j+1]=='/' || zRepo[j-1]=='/' || zRepo[j+1]=='.')
        if( fossil_isalnum(c) ) continue;
        if( c=='/' ) continue;
        ){
          zRepo[j] = '_';
        if( c=='_' ) continue;
        if( c=='-' && zRepo[j-1]!='/' ) continue;
        if( c=='.' && fossil_isalnum(zRepo[j-1]) && fossil_isalnum(zRepo[j+1])){
          continue;
        }
        szFile = 1;
        break;
      }
      if( szFile==0 ){
      if( zRepo[0]=='/' && zRepo[1]=='/' ){ zRepo++; j--; }
        if( zRepo[0]=='/' && zRepo[1]=='/' ){ zRepo++; j--; }

      szFile = file_size(zRepo);
        szFile = file_size(zRepo);
      }
      if( szFile<0 ){
        const char *zMimetype;
        assert( fossil_strcmp(&zRepo[j], ".fossil")==0 );
        zRepo[j] = 0;
        if( zPathInfo[i]=='/' && file_isdir(zRepo)==1 ){
          fossil_free(zToFree);
          i++;