From be1dce56187e517b48a965758ff47c5545231353 Mon Sep 17 00:00:00 2001 From: Roman Proskuryakov <humbug@deeptown.org> Date: Thu, 29 Apr 2021 13:37:05 +0000 Subject: [PATCH] Fix reliance on non-empty NodeInfo::endpoints (#8684) * Use as_deref instead of .map in Node::client_version * Fix reliance on non-empty NodeInfo::endpoints --- substrate/client/network/src/peer_info.rs | 8 +++++--- substrate/client/network/src/service.rs | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/substrate/client/network/src/peer_info.rs b/substrate/client/network/src/peer_info.rs index e7ff848b067..39bbd1d8704 100644 --- a/substrate/client/network/src/peer_info.rs +++ b/substrate/client/network/src/peer_info.rs @@ -138,13 +138,15 @@ pub struct Node<'a>(&'a NodeInfo); impl<'a> Node<'a> { /// Returns the endpoint of an established connection to the peer. - pub fn endpoint(&self) -> &'a ConnectedPoint { - &self.0.endpoints[0] // `endpoints` are non-empty by definition + /// + /// Returns `None` if we are disconnected from the node. + pub fn endpoint(&self) -> Option<&'a ConnectedPoint> { + self.0.endpoints.get(0) } /// Returns the latest version information we know of. pub fn client_version(&self) -> Option<&'a str> { - self.0.client_version.as_ref().map(|s| &s[..]) + self.0.client_version.as_deref() } /// Returns the latest ping time we know of for this node. `None` if we never successfully diff --git a/substrate/client/network/src/service.rs b/substrate/client/network/src/service.rs index e856c6ddf72..4ad5053d9b2 100644 --- a/substrate/client/network/src/service.rs +++ b/substrate/client/network/src/service.rs @@ -550,7 +550,7 @@ impl<B: BlockT + 'static, H: ExHashT> NetworkWorker<B, H> { let known_addresses = NetworkBehaviour::addresses_of_peer(swarm.behaviour_mut(), peer_id) .into_iter().collect(); - let endpoint = if let Some(e) = swarm.behaviour_mut().node(peer_id).map(|i| i.endpoint()) { + let endpoint = if let Some(e) = swarm.behaviour_mut().node(peer_id).map(|i| i.endpoint()).flatten() { e.clone().into() } else { error!(target: "sub-libp2p", "Found state inconsistency between custom protocol \ -- GitLab