diff options
| author | Simon Sapin <simon.sapin@exyr.org> | 2017-02-26 19:42:11 +0100 |
|---|---|---|
| committer | Simon Sapin <simon.sapin@exyr.org> | 2017-03-01 23:47:59 +0100 |
| commit | f2017f4561852bf65c39fc498cf035a5f385a065 (patch) | |
| tree | 41b700ec62f2195ddeabc08b9d717131e8377aeb /src | |
| parent | 44e9e0a6cf2188c404b9420d49de05fa29f3ea19 (diff) | |
| download | rust-f2017f4561852bf65c39fc498cf035a5f385a065.tar.gz rust-f2017f4561852bf65c39fc498cf035a5f385a065.zip | |
Panic on errors in `format!` or `<T: Display>::to_string`
… instead of silently ignoring a result. `fmt::Write for String` never returns `Err`, so implementations of `Display` (or other traits of that family) never should either. Fixes #40103
Diffstat (limited to 'src')
| -rw-r--r-- | src/libcollections/fmt.rs | 3 | ||||
| -rw-r--r-- | src/libcollections/macros.rs | 6 | ||||
| -rw-r--r-- | src/libcollections/string.rs | 9 |
3 files changed, 16 insertions, 2 deletions
diff --git a/src/libcollections/fmt.rs b/src/libcollections/fmt.rs index 079541235a2..dfd292176d2 100644 --- a/src/libcollections/fmt.rs +++ b/src/libcollections/fmt.rs @@ -524,6 +524,7 @@ use string; pub fn format(args: Arguments) -> string::String { let capacity = args.estimated_capacity(); let mut output = string::String::with_capacity(capacity); - let _ = output.write_fmt(args); + output.write_fmt(args) + .expect("a formatting trait implementation returned an error"); output } diff --git a/src/libcollections/macros.rs b/src/libcollections/macros.rs index 3115be00a4d..396a917dfde 100644 --- a/src/libcollections/macros.rs +++ b/src/libcollections/macros.rs @@ -72,6 +72,12 @@ macro_rules! vec { /// /// [fmt]: ../std/fmt/index.html /// +/// # Panics +/// +/// `format!` panics if a formatting trait implementation returns an error. +/// This indicates an incorrect implementation +/// since `fmt::Write for String` never returns an error itself. +/// /// # Examples /// /// ``` diff --git a/src/libcollections/string.rs b/src/libcollections/string.rs index 10bc5ab88c9..a8942619cea 100644 --- a/src/libcollections/string.rs +++ b/src/libcollections/string.rs @@ -1888,13 +1888,20 @@ pub trait ToString { fn to_string(&self) -> String; } +/// # Panics +/// +/// In this implementation, the `to_string` method panics +/// if the `Display` implementation returns an error. +/// This indicates an incorrect `Display` implementation +/// since `fmt::Write for String` never returns an error itself. #[stable(feature = "rust1", since = "1.0.0")] impl<T: fmt::Display + ?Sized> ToString for T { #[inline] default fn to_string(&self) -> String { use core::fmt::Write; let mut buf = String::new(); - let _ = buf.write_fmt(format_args!("{}", self)); + buf.write_fmt(format_args!("{}", self)) + .expect("a Display implementation return an error unexpectedly"); buf.shrink_to_fit(); buf } |
