From 82e246d87b9cb3fa77795faad05fc65069ae299a Mon Sep 17 00:00:00 2001 From: Deirdre Connolly Date: Thu, 5 Dec 2019 14:06:05 -0500 Subject: [PATCH] Merge pull request #135 from ZcashFoundation/130 On receipt of a Filter(Load|Add|Clear) message, disconnect from peer --- zebra-network/src/peer/error.rs | 4 ++++ zebra-network/src/peer/server.rs | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/zebra-network/src/peer/error.rs b/zebra-network/src/peer/error.rs index 7eba487d4..592e16978 100644 --- a/zebra-network/src/peer/error.rs +++ b/zebra-network/src/peer/error.rs @@ -40,6 +40,10 @@ pub enum PeerError { /// to shed load. #[error("Internal services over capacity")] Overloaded, + /// A peer sent us a message we don't support or instructed to + /// disconnect from upon receipt. + #[error("Remote peer sent an unsupported message type.")] + UnsupportedMessage, /// We got a `Reject` message. This does not necessarily mean that /// the peer connection is in a bad state, but for the time being /// we are considering it a PeerError. diff --git a/zebra-network/src/peer/server.rs b/zebra-network/src/peer/server.rs index 7b3dc886c..8f6ca9766 100644 --- a/zebra-network/src/peer/server.rs +++ b/zebra-network/src/peer/server.rs @@ -325,6 +325,18 @@ where _ => {} } + // Per BIP-011, since we don't advertise NODE_BLOOM, we MUST + // disconnect from this peer immediately. + match msg { + Message::FilterLoad { .. } + | Message::FilterAdd { .. } + | Message::FilterClear { .. } => { + self.fail_with(PeerError::UnsupportedMessage); + return; + } + _ => {} + } + // Interpret `msg` as a request from the remote peer to our node, // and try to construct an appropriate request object. let req = match msg {