Fossil SCM

blob_append_json_literal() now escapes hard tab, newlines, and carriage returns. Fixes /jchunk loading of makefiles and windows text files.

stephan 2021-09-11 18:39 trunk
Commit 0f7740b6329e533852a948f07992a8c116080fc9e3b952fafc4358ccfd296b41
1 file changed +8 -3
+8 -3
--- src/blob.c
+++ src/blob.c
@@ -399,17 +399,22 @@
399399
void blob_append_json_literal(Blob *pOut, const char *z, int n){
400400
int i;
401401
blob_append_char(pOut, '"');
402402
for(i=0; i<n; i++){
403403
char c = z[i];
404
+ char esc = 0;
404405
switch( c ){
406
+ case '\t': c = 't';
405407
case '"':
406408
case '\\':
407
- blob_append_char(pOut, '\\');
408
- default:
409
- blob_append_char(pOut, c);
409
+ esc = 1;
410
+ break;
411
+ case '\r': c = 'r'; esc = 1; break;
412
+ case '\n': c = 'n'; esc = 1; break;
410413
}
414
+ if(esc) blob_append_char(pOut, '\\');
415
+ blob_append_char(pOut, c);
411416
}
412417
blob_append_char(pOut, '"');
413418
}
414419
415420
416421
--- src/blob.c
+++ src/blob.c
@@ -399,17 +399,22 @@
399 void blob_append_json_literal(Blob *pOut, const char *z, int n){
400 int i;
401 blob_append_char(pOut, '"');
402 for(i=0; i<n; i++){
403 char c = z[i];
 
404 switch( c ){
 
405 case '"':
406 case '\\':
407 blob_append_char(pOut, '\\');
408 default:
409 blob_append_char(pOut, c);
 
410 }
 
 
411 }
412 blob_append_char(pOut, '"');
413 }
414
415
416
--- src/blob.c
+++ src/blob.c
@@ -399,17 +399,22 @@
399 void blob_append_json_literal(Blob *pOut, const char *z, int n){
400 int i;
401 blob_append_char(pOut, '"');
402 for(i=0; i<n; i++){
403 char c = z[i];
404 char esc = 0;
405 switch( c ){
406 case '\t': c = 't';
407 case '"':
408 case '\\':
409 esc = 1;
410 break;
411 case '\r': c = 'r'; esc = 1; break;
412 case '\n': c = 'n'; esc = 1; break;
413 }
414 if(esc) blob_append_char(pOut, '\\');
415 blob_append_char(pOut, c);
416 }
417 blob_append_char(pOut, '"');
418 }
419
420
421

Keyboard Shortcuts

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