From 050af6b220b7294ee5b03f2182d0b40c639e6ea5 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Sun, 21 Nov 2021 23:44:15 -0800 Subject: [PATCH 1/2] Add test of newlines in ensure debug --- tests/test_ensure.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tests/test_ensure.rs b/tests/test_ensure.rs index ac69ce9..8892053 100644 --- a/tests/test_ensure.rs +++ b/tests/test_ensure.rs @@ -366,6 +366,19 @@ fn test_trailer() { ); } +#[test] +fn test_whitespace() { + #[derive(Debug)] + pub struct Point { + pub x: i32, + pub y: i32, + } + + let point = Point { x: 0, y: 0 }; + let test = || Ok(ensure!("" == format!("{:#?}", point))); + assert_err(test, "Condition failed: `\"\" == format!(\"{:#?}\", point)` (\"\" vs \"Point {\\n x: 0,\\n y: 0,\\n}\")"); +} + #[test] fn test_too_long() { let test = || Ok(ensure!("" == "x".repeat(10))); From c866f2b705acd17aedb97afc5e0380bf6383f1d9 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Sun, 21 Nov 2021 23:41:35 -0800 Subject: [PATCH 2/2] Exclude messages containing whitespace --- src/ensure.rs | 28 ++++++++++++++++------------ tests/test_ensure.rs | 2 +- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/ensure.rs b/src/ensure.rs index fb45baa..4f05a5c 100644 --- a/src/ensure.rs +++ b/src/ensure.rs @@ -47,20 +47,24 @@ impl Buf { impl Write for Buf { fn write_str(&mut self, s: &str) -> fmt::Result { + if s.bytes().any(|b| b == b' ' || b == b'\n') { + return Err(fmt::Error); + } + let remaining = self.bytes.len() - self.written; - if s.len() <= remaining { - unsafe { - ptr::copy_nonoverlapping( - s.as_ptr(), - self.bytes.as_mut_ptr().add(self.written).cast::(), - s.len(), - ); - } - self.written += s.len(); - Ok(()) - } else { - Err(fmt::Error) + if s.len() > remaining { + return Err(fmt::Error); + } + + unsafe { + ptr::copy_nonoverlapping( + s.as_ptr(), + self.bytes.as_mut_ptr().add(self.written).cast::(), + s.len(), + ); } + self.written += s.len(); + Ok(()) } } diff --git a/tests/test_ensure.rs b/tests/test_ensure.rs index 8892053..37d56cb 100644 --- a/tests/test_ensure.rs +++ b/tests/test_ensure.rs @@ -376,7 +376,7 @@ fn test_whitespace() { let point = Point { x: 0, y: 0 }; let test = || Ok(ensure!("" == format!("{:#?}", point))); - assert_err(test, "Condition failed: `\"\" == format!(\"{:#?}\", point)` (\"\" vs \"Point {\\n x: 0,\\n y: 0,\\n}\")"); + assert_err(test, "Condition failed: `\"\" == format!(\"{:#?}\", point)`"); } #[test]