fix: validate fork_id before adding peer from discovery (#871)

This commit is contained in:
Sanket Shanbhag
2023-01-13 23:00:34 +05:30
committed by GitHub
parent a5bdfe54dd
commit 5c80bc9122
2 changed files with 13 additions and 1 deletions

View File

@@ -270,7 +270,11 @@ where
fn on_discovery_event(&mut self, event: DiscoveryEvent) {
match event {
DiscoveryEvent::Discovered { peer_id, socket_addr, fork_id } => {
self.peers_manager.add_peer(peer_id, socket_addr, fork_id);
self.queued_messages.push_back(StateAction::DiscoveredNode {
peer_id,
socket_addr,
fork_id,
});
}
DiscoveryEvent::EnrForkId(peer_id, fork_id) => {
self.queued_messages
@@ -482,6 +486,8 @@ pub(crate) enum StateAction {
/// The reported [`ForkId`] by this peer.
fork_id: ForkId,
},
/// A new node was found through the discovery, possibly with a ForkId
DiscoveredNode { peer_id: PeerId, socket_addr: SocketAddr, fork_id: Option<ForkId> },
/// A peer was added
PeerAdded(PeerId),
/// A peer was dropped

View File

@@ -235,6 +235,12 @@ where
}
StateAction::PeerAdded(peer_id) => return Some(SwarmEvent::PeerAdded(peer_id)),
StateAction::PeerRemoved(peer_id) => return Some(SwarmEvent::PeerRemoved(peer_id)),
StateAction::DiscoveredNode { peer_id, socket_addr, fork_id } => {
// Insert peer only if no fork id or a valid fork id
if fork_id.map_or_else(|| true, |f| self.sessions.is_valid_fork_id(f)) {
self.state_mut().peers_mut().add_peer(peer_id, socket_addr, fork_id);
}
}
StateAction::DiscoveredEnrForkId { peer_id, fork_id } => {
if self.sessions.is_valid_fork_id(fork_id) {
self.state_mut().peers_mut().set_discovered_fork_id(peer_id, fork_id);