mirror of
https://github.com/paradigmxyz/reth.git
synced 2026-01-29 17:18:08 -05:00
fix: validate fork_id before adding peer from discovery (#871)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user