From 65de227520162c426877e3c9f57826e7a74eb5c1 Mon Sep 17 00:00:00 2001 From: Jack May Date: Wed, 6 Nov 2019 14:32:37 -0800 Subject: [PATCH] Don't panic on packet data (#6769) --- core/src/archiver.rs | 7 +++++-- core/src/cluster_info.rs | 4 ++-- core/src/sigverify_shreds.rs | 4 +--- sdk/src/short_vec.rs | 4 ++-- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/core/src/archiver.rs b/core/src/archiver.rs index 0dda45559..e42ecd704 100644 --- a/core/src/archiver.rs +++ b/core/src/archiver.rs @@ -973,10 +973,13 @@ impl Archiver { socket.send_to(&serialized_req, to).unwrap(); let mut buf = [0; 1024]; if let Ok((size, _addr)) = socket.recv_from(&mut buf) { - return bincode::config() + // Ignore bad packet and try again + if let Ok(slot) = bincode::config() .limit(PACKET_DATA_SIZE as u64) .deserialize(&buf[..size]) - .unwrap(); + { + return slot; + } } sleep(Duration::from_millis(500)); } diff --git a/core/src/cluster_info.rs b/core/src/cluster_info.rs index 7526f619d..e0a0abc24 100644 --- a/core/src/cluster_info.rs +++ b/core/src/cluster_info.rs @@ -1183,8 +1183,8 @@ impl ClusterInfo { "cluster_info-gossip_pull_request_verify_fail", 1 ); - } else if caller.contact_info().is_some() { - if caller.contact_info().unwrap().id == me.read().unwrap().gossip.id { + } else if let Some(contact_info) = caller.contact_info() { + if contact_info.id == me.read().unwrap().gossip.id { warn!("PullRequest ignored, I'm talking to myself"); inc_new_counter_debug!("cluster_info-window-request-loopback", 1); } else { diff --git a/core/src/sigverify_shreds.rs b/core/src/sigverify_shreds.rs index ccfa12bf9..ce1469bf6 100644 --- a/core/src/sigverify_shreds.rs +++ b/core/src/sigverify_shreds.rs @@ -43,9 +43,7 @@ impl ShredSigVerifier { let slot_end = slot_start + size_of::(); trace!("slot {} {}", slot_start, slot_end,); if slot_end <= packet.meta.size { - let slot: u64 = - limited_deserialize(&packet.data[slot_start..slot_end]).ok()?; - Some(slot) + limited_deserialize(&packet.data[slot_start..slot_end]).ok() } else { None } diff --git a/sdk/src/short_vec.rs b/sdk/src/short_vec.rs index ea91ed1e9..38b1e92ae 100644 --- a/sdk/src/short_vec.rs +++ b/sdk/src/short_vec.rs @@ -179,8 +179,8 @@ impl<'de, T: Deserialize<'de>> Deserialize<'de> for ShortVec { /// Return the decoded value and how many bytes it consumed. pub fn decode_len(bytes: &[u8]) -> Result<(usize, usize), Box> { let short_len: ShortU16 = bincode::deserialize(bytes)?; - let num_bytes = bincode::serialized_size(&short_len).unwrap() as usize; - Ok((short_len.0 as usize, num_bytes)) + let num_bytes = bincode::serialized_size(&short_len)?; + Ok((short_len.0 as usize, num_bytes as usize)) } #[cfg(test)]