Skip to content

Commit 0d38317

Browse files
committed
Merge pull request #19764 from lifthrasiir/that-stray-nul
serialize: Avoid stray nul characters when auto-serializing char. Reviewed-by: alexcrichton
2 parents 14aad4c + 577f742 commit 0d38317

File tree

1 file changed

+28
-26
lines changed

1 file changed

+28
-26
lines changed

src/libserialize/json.rs

+28-26
Original file line numberDiff line numberDiff line change
@@ -367,8 +367,8 @@ fn escape_str(writer: &mut io::Writer, v: &str) -> Result<(), io::IoError> {
367367

368368
fn escape_char(writer: &mut io::Writer, v: char) -> Result<(), io::IoError> {
369369
let mut buf = [0, .. 4];
370-
v.encode_utf8(&mut buf);
371-
escape_bytes(writer, &mut buf)
370+
let len = v.encode_utf8(&mut buf).unwrap();
371+
escape_bytes(writer, buf[mut ..len])
372372
}
373373

374374
fn spaces(wr: &mut io::Writer, mut n: uint) -> Result<(), io::IoError> {
@@ -2729,37 +2729,39 @@ mod tests {
27292729
);
27302730
}
27312731

2732+
macro_rules! check_encoder_for_simple(
2733+
($value:expr, $expected:expr) => ({
2734+
let s = with_str_writer(|writer| {
2735+
let mut encoder = Encoder::new(writer);
2736+
$value.encode(&mut encoder).unwrap();
2737+
});
2738+
assert_eq!(s, $expected);
2739+
2740+
let s = with_str_writer(|writer| {
2741+
let mut encoder = PrettyEncoder::new(writer);
2742+
$value.encode(&mut encoder).unwrap();
2743+
});
2744+
assert_eq!(s, $expected);
2745+
})
2746+
)
2747+
27322748
#[test]
27332749
fn test_write_some() {
2734-
let value = Some("jodhpurs".into_string());
2735-
let s = with_str_writer(|writer| {
2736-
let mut encoder = Encoder::new(writer);
2737-
value.encode(&mut encoder).unwrap();
2738-
});
2739-
assert_eq!(s, "\"jodhpurs\"");
2740-
2741-
let value = Some("jodhpurs".into_string());
2742-
let s = with_str_writer(|writer| {
2743-
let mut encoder = PrettyEncoder::new(writer);
2744-
value.encode(&mut encoder).unwrap();
2745-
});
2746-
assert_eq!(s, "\"jodhpurs\"");
2750+
check_encoder_for_simple!(Some("jodhpurs".to_string()), "\"jodhpurs\"");
27472751
}
27482752

27492753
#[test]
27502754
fn test_write_none() {
2751-
let value: Option<string::String> = None;
2752-
let s = with_str_writer(|writer| {
2753-
let mut encoder = Encoder::new(writer);
2754-
value.encode(&mut encoder).unwrap();
2755-
});
2756-
assert_eq!(s, "null");
2755+
check_encoder_for_simple!(None::<string::String>, "null");
2756+
}
27572757

2758-
let s = with_str_writer(|writer| {
2759-
let mut encoder = Encoder::new(writer);
2760-
value.encode(&mut encoder).unwrap();
2761-
});
2762-
assert_eq!(s, "null");
2758+
#[test]
2759+
fn test_write_char() {
2760+
check_encoder_for_simple!('a', "\"a\"");
2761+
check_encoder_for_simple!('\t', "\"\\t\"");
2762+
check_encoder_for_simple!('\u00a0', "\"\u00a0\"");
2763+
check_encoder_for_simple!('\uabcd', "\"\uabcd\"");
2764+
check_encoder_for_simple!('\U0010ffff', "\"\U0010ffff\"");
27632765
}
27642766

27652767
#[test]

0 commit comments

Comments
 (0)