Fossil SCM
blob_append_json_literal() now escapes hard tab, newlines, and carriage returns. Fixes /jchunk loading of makefiles and windows text files.
Commit
0f7740b6329e533852a948f07992a8c116080fc9e3b952fafc4358ccfd296b41
Parent
ee0b76a77e76ed9…
1 file changed
+8
-3
+8
-3
| --- src/blob.c | ||
| +++ src/blob.c | ||
| @@ -399,17 +399,22 @@ | ||
| 399 | 399 | void blob_append_json_literal(Blob *pOut, const char *z, int n){ |
| 400 | 400 | int i; |
| 401 | 401 | blob_append_char(pOut, '"'); |
| 402 | 402 | for(i=0; i<n; i++){ |
| 403 | 403 | char c = z[i]; |
| 404 | + char esc = 0; | |
| 404 | 405 | switch( c ){ |
| 406 | + case '\t': c = 't'; | |
| 405 | 407 | case '"': |
| 406 | 408 | 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; | |
| 410 | 413 | } |
| 414 | + if(esc) blob_append_char(pOut, '\\'); | |
| 415 | + blob_append_char(pOut, c); | |
| 411 | 416 | } |
| 412 | 417 | blob_append_char(pOut, '"'); |
| 413 | 418 | } |
| 414 | 419 | |
| 415 | 420 | |
| 416 | 421 |
| --- 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 |