Fossil SCM

Further improvements to argument escaping on Unix.

drh 2021-06-22 19:19 trunk
Commit 597f0bc224a0343716962446f6a9bd371f83aedf902c3495c16bdbe7fb1b46a0
1 file changed +18 -9
+18 -9
--- src/blob.c
+++ src/blob.c
@@ -1325,11 +1325,11 @@
13251325
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, /* 7x */
13261326
#else
13271327
/* x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xa xb xc xd xe xf */
13281328
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, /* 0x */
13291329
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 */
13311331
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, /* 3x */
13321332
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 4x */
13331333
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, /* 5x */
13341334
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 6x */
13351335
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, /* 7x */
@@ -1353,11 +1353,10 @@
13531353
*/
13541354
void blob_append_escaped_arg(Blob *pBlob, const char *zIn){
13551355
int i;
13561356
unsigned char c;
13571357
int needEscape = 0;
1358
- int hasIllegal = 0;
13591358
int n = blob_size(pBlob);
13601359
char *z = blob_buffer(pBlob);
13611360
#if defined(_WIN32)
13621361
const char *zNeedQuote = "\"^[];*? ";
13631362
#else
@@ -1403,17 +1402,27 @@
14031402
blob_append_char(pBlob, (char)c);
14041403
if( c=='"' ) blob_append_char(pBlob, '"');
14051404
}
14061405
blob_append_char(pBlob, '"');
14071406
#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, '\'');
14151424
}
14161425
#endif
14171426
}
14181427
}
14191428
14201429
--- 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

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button