I'm getting a panic in impl de::Error for Error when the feature custom-error-messages is enabled
|
impl de::Error for Error { |
|
#[cfg_attr(not(feature = "custom-error-messages"), allow(unused_variables))] |
|
fn custom<T>(msg: T) -> Self |
|
where |
|
T: fmt::Display, |
|
{ |
|
#[cfg(not(feature = "custom-error-messages"))] |
|
{ |
|
Error::CustomError |
|
} |
|
#[cfg(feature = "custom-error-messages")] |
|
{ |
|
use core::fmt::Write; |
|
|
|
let mut string = heapless::String::new(); |
|
write!(string, "{:.64}", msg).unwrap(); |
|
Error::CustomErrorWithMessage(string) |
|
} |
|
} |
|
} |
The panic occurs on the line: write!(string, "{:.64}", msg).unwrap()
when it tries to format an error message like
unknown variant a1, expected one of b2, b3, b4, b5, b6, b7
The panic occurs because serde uses format_args!
https://github.com/serde-rs/serde/blob/31000e1874ff01362f91e7b53794e402fab4fc78/serde/src/de/mod.rs#L255-L259
Error::custom(format_args!(
"unknown variant `{}`, expected {}",
variant,
OneOf { names: expected }
))
and format_args! cannot be be truncated using specified precision.
See the following simplified reproducer, generates the same panic:
let x = serde_json_core::de::Error::custom(format_args!(
"unknown variant `{}`, expected {}",
"a",
"one of bbbbbbbbbbbbbbbbbbbbbbbbb,ccccccccccccccccccc,ddddddddddddddddddddddddd,eeeeeeeeee"
));
error!("{:?}", x);
I'm getting a panic in
impl de::Error for Errorwhen the featurecustom-error-messagesis enabledserde-json-core/src/de/mod.rs
Lines 765 to 784 in ca67457
The panic occurs on the line:
write!(string, "{:.64}", msg).unwrap()when it tries to format an error message like
The panic occurs because
serdeusesformat_args!https://github.com/serde-rs/serde/blob/31000e1874ff01362f91e7b53794e402fab4fc78/serde/src/de/mod.rs#L255-L259
and
format_args!cannot be be truncated using specified precision.See the following simplified reproducer, generates the same panic: