Skip to content

Commit 46e64a1

Browse files
authored
Log failed deserialization (#3613)
1 parent b8afa6a commit 46e64a1

File tree

1 file changed

+14
-5
lines changed

1 file changed

+14
-5
lines changed

crates/hotshot/types/src/message.rs

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -755,15 +755,14 @@ impl<TYPES: NodeType, V: Versions> UpgradeLock<TYPES, V> {
755755
/// # Errors
756756
///
757757
/// Errors if deserialization fails.
758-
pub async fn deserialize<M: HasViewNumber<TYPES> + for<'a> Deserialize<'a>>(
758+
pub async fn deserialize<M: Debug + HasViewNumber<TYPES> + for<'a> Deserialize<'a>>(
759759
&self,
760760
message: &[u8],
761761
) -> Result<(M, Version)> {
762762
// Get the actual version from the message itself
763-
let actual_version = Version::deserialize(message)
763+
let (actual_version, rest) = Version::deserialize(message)
764764
.wrap()
765-
.context(info!("Failed to read message version!"))?
766-
.0;
765+
.context(info!("Failed to read message version!"))?;
767766

768767
// Deserialize the message using the stated version
769768
let deserialized_message: M = match actual_version {
@@ -774,7 +773,17 @@ impl<TYPES: NodeType, V: Versions> UpgradeLock<TYPES, V> {
774773
v if v == V::Base::VERSION => Serializer::<V::Base>::deserialize(message),
775774
v if v == V::Upgrade::VERSION => Serializer::<V::Upgrade>::deserialize(message),
776775
v => {
777-
bail!("Cannot deserialize message with stated version {v}");
776+
let attempted_deserialization: M = match bincode::deserialize(rest) {
777+
Ok(m) => m,
778+
Err(e) => {
779+
bail!("Cannot deserialize message with state version: {v}. Error: {e}");
780+
},
781+
};
782+
783+
bail!(warn!(
784+
"Received a message with state version {v} which is invalid for its view: {:?}",
785+
attempted_deserialization
786+
));
778787
},
779788
}
780789
.wrap()

0 commit comments

Comments
 (0)