Fossil SCM

Fix the blob_append_tcl_literal() routine to escape carriage-return characters (U+000d). Possible fix for the problem reported at [forum:/forumpost/390440e9793bfef7|forum post 390440e9793bfef7].

drh 2021-09-04 10:27 diff-color-enhancements
Commit b4c961e8fb788d2b8dda2d6e2828d4e169f46fd04f314d8a2d8453a88915ebd3
1 file changed +7 -4
+7 -4
--- src/blob.c
+++ src/blob.c
@@ -367,33 +367,36 @@
367367
*/
368368
void blob_append_tcl_literal(Blob *pOut, const char *z, int n){
369369
int i;
370370
blob_append_char(pOut, '"');
371371
for(i=0; i<n; i++){
372
- switch( z[i] ){
372
+ char c = z[i];
373
+ switch( c ){
374
+ case '\r': c = 'r';
373375
case '[':
374376
case ']':
375377
case '$':
376378
case '"':
377379
case '\\':
378380
blob_append_char(pOut, '\\');
379381
default:
380
- blob_append_char(pOut, z[i]);
382
+ blob_append_char(pOut, c);
381383
}
382384
}
383385
blob_append_char(pOut, '"');
384386
}
385387
void blob_append_json_literal(Blob *pOut, const char *z, int n){
386388
int i;
387389
blob_append_char(pOut, '"');
388390
for(i=0; i<n; i++){
389
- switch( z[i] ){
391
+ char c = z[i];
392
+ switch( c ){
390393
case '"':
391394
case '\\':
392395
blob_append_char(pOut, '\\');
393396
default:
394
- blob_append_char(pOut, z[i]);
397
+ blob_append_char(pOut, c);
395398
}
396399
}
397400
blob_append_char(pOut, '"');
398401
}
399402
400403
--- src/blob.c
+++ src/blob.c
@@ -367,33 +367,36 @@
367 */
368 void blob_append_tcl_literal(Blob *pOut, const char *z, int n){
369 int i;
370 blob_append_char(pOut, '"');
371 for(i=0; i<n; i++){
372 switch( z[i] ){
 
 
373 case '[':
374 case ']':
375 case '$':
376 case '"':
377 case '\\':
378 blob_append_char(pOut, '\\');
379 default:
380 blob_append_char(pOut, z[i]);
381 }
382 }
383 blob_append_char(pOut, '"');
384 }
385 void blob_append_json_literal(Blob *pOut, const char *z, int n){
386 int i;
387 blob_append_char(pOut, '"');
388 for(i=0; i<n; i++){
389 switch( z[i] ){
 
390 case '"':
391 case '\\':
392 blob_append_char(pOut, '\\');
393 default:
394 blob_append_char(pOut, z[i]);
395 }
396 }
397 blob_append_char(pOut, '"');
398 }
399
400
--- src/blob.c
+++ src/blob.c
@@ -367,33 +367,36 @@
367 */
368 void blob_append_tcl_literal(Blob *pOut, const char *z, int n){
369 int i;
370 blob_append_char(pOut, '"');
371 for(i=0; i<n; i++){
372 char c = z[i];
373 switch( c ){
374 case '\r': c = 'r';
375 case '[':
376 case ']':
377 case '$':
378 case '"':
379 case '\\':
380 blob_append_char(pOut, '\\');
381 default:
382 blob_append_char(pOut, c);
383 }
384 }
385 blob_append_char(pOut, '"');
386 }
387 void blob_append_json_literal(Blob *pOut, const char *z, int n){
388 int i;
389 blob_append_char(pOut, '"');
390 for(i=0; i<n; i++){
391 char c = z[i];
392 switch( c ){
393 case '"':
394 case '\\':
395 blob_append_char(pOut, '\\');
396 default:
397 blob_append_char(pOut, c);
398 }
399 }
400 blob_append_char(pOut, '"');
401 }
402
403

Keyboard Shortcuts

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