Fossil SCM
Further improvements to argument escaping on Unix.
Commit
597f0bc224a0343716962446f6a9bd371f83aedf902c3495c16bdbe7fb1b46a0
Parent
b3fab9b5ddfedf9…
1 file changed
+18
-9
+18
-9
| --- src/blob.c | ||
| +++ src/blob.c | ||
| @@ -1325,11 +1325,11 @@ | ||
| 1325 | 1325 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, /* 7x */ |
| 1326 | 1326 | #else |
| 1327 | 1327 | /* x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xa xb xc xd xe xf */ |
| 1328 | 1328 | 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, /* 0x */ |
| 1329 | 1329 | 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, /* 1x */ |
| 1330 | - 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, /* 2x */ | |
| 1330 | + 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, /* 2x */ | |
| 1331 | 1331 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, /* 3x */ |
| 1332 | 1332 | 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 4x */ |
| 1333 | 1333 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, /* 5x */ |
| 1334 | 1334 | 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 6x */ |
| 1335 | 1335 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, /* 7x */ |
| @@ -1353,11 +1353,10 @@ | ||
| 1353 | 1353 | */ |
| 1354 | 1354 | void blob_append_escaped_arg(Blob *pBlob, const char *zIn){ |
| 1355 | 1355 | int i; |
| 1356 | 1356 | unsigned char c; |
| 1357 | 1357 | int needEscape = 0; |
| 1358 | - int hasIllegal = 0; | |
| 1359 | 1358 | int n = blob_size(pBlob); |
| 1360 | 1359 | char *z = blob_buffer(pBlob); |
| 1361 | 1360 | #if defined(_WIN32) |
| 1362 | 1361 | const char *zNeedQuote = "\"^[];*? "; |
| 1363 | 1362 | #else |
| @@ -1403,17 +1402,27 @@ | ||
| 1403 | 1402 | blob_append_char(pBlob, (char)c); |
| 1404 | 1403 | if( c=='"' ) blob_append_char(pBlob, '"'); |
| 1405 | 1404 | } |
| 1406 | 1405 | blob_append_char(pBlob, '"'); |
| 1407 | 1406 | #else |
| 1408 | - if( zIn[0]=='-' ){ | |
| 1409 | - blob_append_char(pBlob, '.'); | |
| 1410 | - blob_append_char(pBlob, '/'); | |
| 1411 | - } | |
| 1412 | - for(i=0; (c = (unsigned char)zIn[i])!=0; i++){ | |
| 1413 | - if( aSafeChar[c] ) blob_append_char(pBlob, '\\'); | |
| 1414 | - blob_append_char(pBlob, (char)c); | |
| 1407 | + if( strchr(zIn,'\'') ){ | |
| 1408 | + if( zIn[0]=='-' ){ | |
| 1409 | + blob_append_char(pBlob, '.'); | |
| 1410 | + blob_append_char(pBlob, '/'); | |
| 1411 | + } | |
| 1412 | + for(i=0; (c = (unsigned char)zIn[i])!=0; i++){ | |
| 1413 | + if( aSafeChar[c] ) blob_append_char(pBlob, '\\'); | |
| 1414 | + blob_append_char(pBlob, (char)c); | |
| 1415 | + } | |
| 1416 | + }else{ | |
| 1417 | + if( zIn[0]=='-' ){ | |
| 1418 | + blob_append_char(pBlob, '.'); | |
| 1419 | + blob_append_char(pBlob, '/'); | |
| 1420 | + } | |
| 1421 | + blob_append_char(pBlob, '\''); | |
| 1422 | + blob_append(pBlob, zIn, -1); | |
| 1423 | + blob_append_char(pBlob, '\''); | |
| 1415 | 1424 | } |
| 1416 | 1425 | #endif |
| 1417 | 1426 | } |
| 1418 | 1427 | } |
| 1419 | 1428 | |
| 1420 | 1429 |
| --- src/blob.c | |
| +++ src/blob.c | |
| @@ -1325,11 +1325,11 @@ | |
| 1325 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, /* 7x */ |
| 1326 | #else |
| 1327 | /* x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xa xb xc xd xe xf */ |
| 1328 | 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, /* 0x */ |
| 1329 | 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, /* 1x */ |
| 1330 | 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, /* 2x */ |
| 1331 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, /* 3x */ |
| 1332 | 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 4x */ |
| 1333 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, /* 5x */ |
| 1334 | 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 6x */ |
| 1335 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, /* 7x */ |
| @@ -1353,11 +1353,10 @@ | |
| 1353 | */ |
| 1354 | void blob_append_escaped_arg(Blob *pBlob, const char *zIn){ |
| 1355 | int i; |
| 1356 | unsigned char c; |
| 1357 | int needEscape = 0; |
| 1358 | int hasIllegal = 0; |
| 1359 | int n = blob_size(pBlob); |
| 1360 | char *z = blob_buffer(pBlob); |
| 1361 | #if defined(_WIN32) |
| 1362 | const char *zNeedQuote = "\"^[];*? "; |
| 1363 | #else |
| @@ -1403,17 +1402,27 @@ | |
| 1403 | blob_append_char(pBlob, (char)c); |
| 1404 | if( c=='"' ) blob_append_char(pBlob, '"'); |
| 1405 | } |
| 1406 | blob_append_char(pBlob, '"'); |
| 1407 | #else |
| 1408 | if( zIn[0]=='-' ){ |
| 1409 | blob_append_char(pBlob, '.'); |
| 1410 | blob_append_char(pBlob, '/'); |
| 1411 | } |
| 1412 | for(i=0; (c = (unsigned char)zIn[i])!=0; i++){ |
| 1413 | if( aSafeChar[c] ) blob_append_char(pBlob, '\\'); |
| 1414 | blob_append_char(pBlob, (char)c); |
| 1415 | } |
| 1416 | #endif |
| 1417 | } |
| 1418 | } |
| 1419 | |
| 1420 |
| --- src/blob.c | |
| +++ src/blob.c | |
| @@ -1325,11 +1325,11 @@ | |
| 1325 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, /* 7x */ |
| 1326 | #else |
| 1327 | /* x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xa xb xc xd xe xf */ |
| 1328 | 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, /* 0x */ |
| 1329 | 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, /* 1x */ |
| 1330 | 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, /* 2x */ |
| 1331 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, /* 3x */ |
| 1332 | 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 4x */ |
| 1333 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, /* 5x */ |
| 1334 | 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 6x */ |
| 1335 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, /* 7x */ |
| @@ -1353,11 +1353,10 @@ | |
| 1353 | */ |
| 1354 | void blob_append_escaped_arg(Blob *pBlob, const char *zIn){ |
| 1355 | int i; |
| 1356 | unsigned char c; |
| 1357 | int needEscape = 0; |
| 1358 | int n = blob_size(pBlob); |
| 1359 | char *z = blob_buffer(pBlob); |
| 1360 | #if defined(_WIN32) |
| 1361 | const char *zNeedQuote = "\"^[];*? "; |
| 1362 | #else |
| @@ -1403,17 +1402,27 @@ | |
| 1402 | blob_append_char(pBlob, (char)c); |
| 1403 | if( c=='"' ) blob_append_char(pBlob, '"'); |
| 1404 | } |
| 1405 | blob_append_char(pBlob, '"'); |
| 1406 | #else |
| 1407 | if( strchr(zIn,'\'') ){ |
| 1408 | if( zIn[0]=='-' ){ |
| 1409 | blob_append_char(pBlob, '.'); |
| 1410 | blob_append_char(pBlob, '/'); |
| 1411 | } |
| 1412 | for(i=0; (c = (unsigned char)zIn[i])!=0; i++){ |
| 1413 | if( aSafeChar[c] ) blob_append_char(pBlob, '\\'); |
| 1414 | blob_append_char(pBlob, (char)c); |
| 1415 | } |
| 1416 | }else{ |
| 1417 | if( zIn[0]=='-' ){ |
| 1418 | blob_append_char(pBlob, '.'); |
| 1419 | blob_append_char(pBlob, '/'); |
| 1420 | } |
| 1421 | blob_append_char(pBlob, '\''); |
| 1422 | blob_append(pBlob, zIn, -1); |
| 1423 | blob_append_char(pBlob, '\''); |
| 1424 | } |
| 1425 | #endif |
| 1426 | } |
| 1427 | } |
| 1428 | |
| 1429 |