-
Couldn't load subscription status.
- Fork 69
Open
Description
I'm getting a panic in impl de::Error for Error when the feature custom-error-messages is enabled
Lines 765 to 784 in ca67457
| 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 ofb2,b3,b4,b5,b6,b7
The panic occurs because serde uses format_args!
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);Metadata
Metadata
Assignees
Labels
No labels