Fossil SCM
Fix the JSON string encoder so that it works for non-BMP unicode characters.
Commit
006b908e0cdc19d8a8722c8508dba5d1a1a89d344b5facd24773e9ef94b880da
Parent
9650c739dda5d6a…
1 file changed
+4
-4
+4
-4
| --- src/encode.c | ||
| +++ src/encode.c | ||
| @@ -401,14 +401,14 @@ | ||
| 401 | 401 | char *zOut; |
| 402 | 402 | u32 c; |
| 403 | 403 | int n, i, j; |
| 404 | 404 | z = (const unsigned char*)zStr; |
| 405 | 405 | n = 0; |
| 406 | - while( (c = fossil_utf8_read(&z))!=0 ){ | |
| 406 | + while( (c = *(z++))!=0 ){ | |
| 407 | 407 | if( c=='\\' || c=='"' ){ |
| 408 | 408 | n += 2; |
| 409 | - }else if( c<' ' || c>=0x7f ){ | |
| 409 | + }else if( c<' ' ){ | |
| 410 | 410 | if( c=='\n' || c=='\r' ){ |
| 411 | 411 | n += 2; |
| 412 | 412 | }else{ |
| 413 | 413 | n += 6; |
| 414 | 414 | } |
| @@ -424,15 +424,15 @@ | ||
| 424 | 424 | z = (const unsigned char*)zStr; |
| 425 | 425 | i = 0; |
| 426 | 426 | if(fAddQuotes){ |
| 427 | 427 | zOut[i++] = '"'; |
| 428 | 428 | } |
| 429 | - while( (c = fossil_utf8_read(&z))!=0 ){ | |
| 429 | + while( (c = *(z++))!=0 ){ | |
| 430 | 430 | if( c=='\\' || c=='"' ){ |
| 431 | 431 | zOut[i++] = '\\'; |
| 432 | 432 | zOut[i++] = c; |
| 433 | - }else if( c<' ' || c>=0x7f ){ | |
| 433 | + }else if( c<' ' ){ | |
| 434 | 434 | zOut[i++] = '\\'; |
| 435 | 435 | if( c=='\n' ){ |
| 436 | 436 | zOut[i++] = 'n'; |
| 437 | 437 | }else if( c=='\r' ){ |
| 438 | 438 | zOut[i++] = 'r'; |
| 439 | 439 |
| --- src/encode.c | |
| +++ src/encode.c | |
| @@ -401,14 +401,14 @@ | |
| 401 | char *zOut; |
| 402 | u32 c; |
| 403 | int n, i, j; |
| 404 | z = (const unsigned char*)zStr; |
| 405 | n = 0; |
| 406 | while( (c = fossil_utf8_read(&z))!=0 ){ |
| 407 | if( c=='\\' || c=='"' ){ |
| 408 | n += 2; |
| 409 | }else if( c<' ' || c>=0x7f ){ |
| 410 | if( c=='\n' || c=='\r' ){ |
| 411 | n += 2; |
| 412 | }else{ |
| 413 | n += 6; |
| 414 | } |
| @@ -424,15 +424,15 @@ | |
| 424 | z = (const unsigned char*)zStr; |
| 425 | i = 0; |
| 426 | if(fAddQuotes){ |
| 427 | zOut[i++] = '"'; |
| 428 | } |
| 429 | while( (c = fossil_utf8_read(&z))!=0 ){ |
| 430 | if( c=='\\' || c=='"' ){ |
| 431 | zOut[i++] = '\\'; |
| 432 | zOut[i++] = c; |
| 433 | }else if( c<' ' || c>=0x7f ){ |
| 434 | zOut[i++] = '\\'; |
| 435 | if( c=='\n' ){ |
| 436 | zOut[i++] = 'n'; |
| 437 | }else if( c=='\r' ){ |
| 438 | zOut[i++] = 'r'; |
| 439 |
| --- src/encode.c | |
| +++ src/encode.c | |
| @@ -401,14 +401,14 @@ | |
| 401 | char *zOut; |
| 402 | u32 c; |
| 403 | int n, i, j; |
| 404 | z = (const unsigned char*)zStr; |
| 405 | n = 0; |
| 406 | while( (c = *(z++))!=0 ){ |
| 407 | if( c=='\\' || c=='"' ){ |
| 408 | n += 2; |
| 409 | }else if( c<' ' ){ |
| 410 | if( c=='\n' || c=='\r' ){ |
| 411 | n += 2; |
| 412 | }else{ |
| 413 | n += 6; |
| 414 | } |
| @@ -424,15 +424,15 @@ | |
| 424 | z = (const unsigned char*)zStr; |
| 425 | i = 0; |
| 426 | if(fAddQuotes){ |
| 427 | zOut[i++] = '"'; |
| 428 | } |
| 429 | while( (c = *(z++))!=0 ){ |
| 430 | if( c=='\\' || c=='"' ){ |
| 431 | zOut[i++] = '\\'; |
| 432 | zOut[i++] = c; |
| 433 | }else if( c<' ' ){ |
| 434 | zOut[i++] = '\\'; |
| 435 | if( c=='\n' ){ |
| 436 | zOut[i++] = 'n'; |
| 437 | }else if( c=='\r' ){ |
| 438 | zOut[i++] = 'r'; |
| 439 |