aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2016-12-30 17:34:11 -0800
committerAlex Crichton <alex@alexcrichton.com>2016-12-30 17:34:11 -0800
commitf6992255dff64e42e690a2ab02bf3ea054157dd2 (patch)
treef1bac1a4c478cde0aab705690d396a31c5b3a57e
parented5c31ee2915dfc42e1ac08f2e1f58ab0625ee4f (diff)
downloadmilf-rs-f6992255dff64e42e690a2ab02bf3ea054157dd2.tar.gz
milf-rs-f6992255dff64e42e690a2ab02bf3ea054157dd2.zip
Escape control characters when encoding strings
Closes #126
-rw-r--r--src/display.rs3
-rw-r--r--src/lib.rs6
2 files changed, 9 insertions, 0 deletions
diff --git a/src/display.rs b/src/display.rs
index f563b77..0a41e2a 100644
--- a/src/display.rs
+++ b/src/display.rs
@@ -49,6 +49,9 @@ fn write_str(f: &mut fmt::Formatter, s: &str) -> fmt::Result {
'\u{d}' => try!(write!(f, "\\r")),
'\u{22}' => try!(write!(f, "\\\"")),
'\u{5c}' => try!(write!(f, "\\\\")),
+ c if c < '\u{1f}' => {
+ try!(write!(f, "\\u{:04}", ch as u32))
+ }
ch => try!(write!(f, "{}", ch)),
}
}
diff --git a/src/lib.rs b/src/lib.rs
index e8dcb92..74fe1b8 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -489,4 +489,10 @@ mod tests {
assert_eq!(Value::Integer(0), *value.lookup("table.\"element\".\"value\".0").unwrap());
}
+ #[test]
+ fn control_characters() {
+ let value = Value::String("\x05".to_string());
+ assert_eq!(value.to_string(), r#""\u0005""#);
+ }
+
}