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