-
Notifications
You must be signed in to change notification settings - Fork 64
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