Fossil SCM
More work on Win32 shell argument escaping.
Commit
8c8a6d1217752362dce2d873929f29edc067047d156b0bb8bfd353ef1b6d6d68
Parent
7a2d06a46a57b2b…
1 file changed
+7
-3
+7
-3
| --- src/blob.c | ||
| +++ src/blob.c | ||
| @@ -1330,15 +1330,19 @@ | ||
| 1330 | 1330 | } |
| 1331 | 1331 | if( needEscape ) blob_append_char(pBlob, cQuote); |
| 1332 | 1332 | if( zIn[0]=='-' ){ |
| 1333 | 1333 | blob_append_char(pBlob, '.'); |
| 1334 | 1334 | blob_append_char(pBlob, cDirSep); |
| 1335 | +#if defined(_WIN32) | |
| 1336 | + }else if( zIn[0]=='/' ){ | |
| 1337 | + blob_append_char(pBlob, '.'); | |
| 1338 | +#endif | |
| 1335 | 1339 | } |
| 1336 | 1340 | #if defined(_WIN32) |
| 1337 | 1341 | if( needEscape ){ |
| 1338 | 1342 | for(i=0; (c = zIn[i])!=0; i++){ |
| 1339 | - if( c==cQuote || c==cEscape ) blob_append_char(pBlob, cEscape); | |
| 1343 | + if( c==cQuote ) blob_append_char(pBlob, cDirSep); | |
| 1340 | 1344 | blob_append_char(pBlob, c); |
| 1341 | 1345 | } |
| 1342 | 1346 | }else{ |
| 1343 | 1347 | blob_append(pBlob, zIn, -1); |
| 1344 | 1348 | } |
| @@ -1346,12 +1350,12 @@ | ||
| 1346 | 1350 | blob_append(pBlob, zIn, -1); |
| 1347 | 1351 | #endif |
| 1348 | 1352 | if( needEscape ){ |
| 1349 | 1353 | #if defined(_WIN32) |
| 1350 | 1354 | /* NOTE: Trailing backslash must be doubled before final double quote. */ |
| 1351 | - if( pBlob->aData[pBlob->nUsed-1]==cEscape ){ | |
| 1352 | - blob_append_char(pBlob, cEscape); | |
| 1355 | + if( pBlob->aData[pBlob->nUsed-1]==cDirSep ){ | |
| 1356 | + blob_append_char(pBlob, cDirSep); | |
| 1353 | 1357 | } |
| 1354 | 1358 | #endif |
| 1355 | 1359 | blob_append_char(pBlob, cQuote); |
| 1356 | 1360 | } |
| 1357 | 1361 | } |
| 1358 | 1362 |
| --- src/blob.c | |
| +++ src/blob.c | |
| @@ -1330,15 +1330,19 @@ | |
| 1330 | } |
| 1331 | if( needEscape ) blob_append_char(pBlob, cQuote); |
| 1332 | if( zIn[0]=='-' ){ |
| 1333 | blob_append_char(pBlob, '.'); |
| 1334 | blob_append_char(pBlob, cDirSep); |
| 1335 | } |
| 1336 | #if defined(_WIN32) |
| 1337 | if( needEscape ){ |
| 1338 | for(i=0; (c = zIn[i])!=0; i++){ |
| 1339 | if( c==cQuote || c==cEscape ) blob_append_char(pBlob, cEscape); |
| 1340 | blob_append_char(pBlob, c); |
| 1341 | } |
| 1342 | }else{ |
| 1343 | blob_append(pBlob, zIn, -1); |
| 1344 | } |
| @@ -1346,12 +1350,12 @@ | |
| 1346 | blob_append(pBlob, zIn, -1); |
| 1347 | #endif |
| 1348 | if( needEscape ){ |
| 1349 | #if defined(_WIN32) |
| 1350 | /* NOTE: Trailing backslash must be doubled before final double quote. */ |
| 1351 | if( pBlob->aData[pBlob->nUsed-1]==cEscape ){ |
| 1352 | blob_append_char(pBlob, cEscape); |
| 1353 | } |
| 1354 | #endif |
| 1355 | blob_append_char(pBlob, cQuote); |
| 1356 | } |
| 1357 | } |
| 1358 |
| --- src/blob.c | |
| +++ src/blob.c | |
| @@ -1330,15 +1330,19 @@ | |
| 1330 | } |
| 1331 | if( needEscape ) blob_append_char(pBlob, cQuote); |
| 1332 | if( zIn[0]=='-' ){ |
| 1333 | blob_append_char(pBlob, '.'); |
| 1334 | blob_append_char(pBlob, cDirSep); |
| 1335 | #if defined(_WIN32) |
| 1336 | }else if( zIn[0]=='/' ){ |
| 1337 | blob_append_char(pBlob, '.'); |
| 1338 | #endif |
| 1339 | } |
| 1340 | #if defined(_WIN32) |
| 1341 | if( needEscape ){ |
| 1342 | for(i=0; (c = zIn[i])!=0; i++){ |
| 1343 | if( c==cQuote ) blob_append_char(pBlob, cDirSep); |
| 1344 | blob_append_char(pBlob, c); |
| 1345 | } |
| 1346 | }else{ |
| 1347 | blob_append(pBlob, zIn, -1); |
| 1348 | } |
| @@ -1346,12 +1350,12 @@ | |
| 1350 | blob_append(pBlob, zIn, -1); |
| 1351 | #endif |
| 1352 | if( needEscape ){ |
| 1353 | #if defined(_WIN32) |
| 1354 | /* NOTE: Trailing backslash must be doubled before final double quote. */ |
| 1355 | if( pBlob->aData[pBlob->nUsed-1]==cDirSep ){ |
| 1356 | blob_append_char(pBlob, cDirSep); |
| 1357 | } |
| 1358 | #endif |
| 1359 | blob_append_char(pBlob, cQuote); |
| 1360 | } |
| 1361 | } |
| 1362 |