Skip to content

Commit 8824c39

Browse files
committed
rollup merge of #20089: rolftimmermans/json-control-chars-escape
Conflicts: src/libserialize/json.rs
2 parents 0a07db4 + 0a7ef3f commit 8824c39

File tree

2 files changed

+35
-3
lines changed

2 files changed

+35
-3
lines changed

AUTHORS.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -498,6 +498,7 @@ Robert Irelan <[email protected]>
498498
Robert Knight <[email protected]>
499499
Robert Millar <[email protected]>
500500
Roland Tanglao <[email protected]>
501+
Rolf Timmermans <[email protected]>
501502
Ron Dahlgren <[email protected]>
502503
Roy Frostig <[email protected]>
503504

src/libserialize/json.rs

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -334,11 +334,39 @@ pub fn escape_bytes(wr: &mut io::Writer, bytes: &[u8]) -> Result<(), io::IoError
334334
let escaped = match *byte {
335335
b'"' => "\\\"",
336336
b'\\' => "\\\\",
337+
b'\x00' => "\\u0000",
338+
b'\x01' => "\\u0001",
339+
b'\x02' => "\\u0002",
340+
b'\x03' => "\\u0003",
341+
b'\x04' => "\\u0004",
342+
b'\x05' => "\\u0005",
343+
b'\x06' => "\\u0006",
344+
b'\x07' => "\\u0007",
337345
b'\x08' => "\\b",
338-
b'\x0c' => "\\f",
346+
b'\t' => "\\t",
339347
b'\n' => "\\n",
348+
b'\x0b' => "\\u000b",
349+
b'\x0c' => "\\f",
340350
b'\r' => "\\r",
341-
b'\t' => "\\t",
351+
b'\x0e' => "\\u000e",
352+
b'\x0f' => "\\u000f",
353+
b'\x10' => "\\u0010",
354+
b'\x11' => "\\u0011",
355+
b'\x12' => "\\u0012",
356+
b'\x13' => "\\u0013",
357+
b'\x14' => "\\u0014",
358+
b'\x15' => "\\u0015",
359+
b'\x16' => "\\u0016",
360+
b'\x17' => "\\u0017",
361+
b'\x18' => "\\u0018",
362+
b'\x19' => "\\u0019",
363+
b'\x1a' => "\\u001a",
364+
b'\x1b' => "\\u001b",
365+
b'\x1c' => "\\u001c",
366+
b'\x1d' => "\\u001d",
367+
b'\x1e' => "\\u001e",
368+
b'\x1f' => "\\u001f",
369+
b'\x7f' => "\\u007f",
342370
_ => { continue; }
343371
};
344372

@@ -2731,7 +2759,10 @@ mod tests {
27312759
fn test_write_char() {
27322760
check_encoder_for_simple!('a', "\"a\"");
27332761
check_encoder_for_simple!('\t', "\"\\t\"");
2734-
check_encoder_for_simple!('\u{a0}', "\"\u{a0}\"");
2762+
check_encoder_for_simple!('\u{0000}', "\"\\u0000\"");
2763+
check_encoder_for_simple!('\u{001b}', "\"\\u001b\"");
2764+
check_encoder_for_simple!('\u{007f}', "\"\\u007f\"");
2765+
check_encoder_for_simple!('\u{00a0}', "\"\u{00a0}\"");
27352766
check_encoder_for_simple!('\u{abcd}', "\"\u{abcd}\"");
27362767
check_encoder_for_simple!('\u{10ffff}', "\"\u{10ffff}\"");
27372768
}

0 commit comments

Comments
 (0)