Skip to content

Commit dd8dc07

Browse files
committed
fix(p2p): When handling pubsub messages, clear buffer for errors other than partial reads
1 parent 6f15c6e commit dd8dc07

File tree

2 files changed

+10
-6
lines changed

2 files changed

+10
-6
lines changed

p2p/src/network/pubsub/p2p_network_pubsub_reducer.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -566,9 +566,7 @@ impl P2pNetworkPubsubState {
566566

567567
match <pb::Rpc as prost::Message>::decode_length_delimited(slice) {
568568
Ok(decoded) => {
569-
client_state.buffer.clear();
570-
client_state.buffer.shrink_to(0x2000);
571-
569+
client_state.clear_buffer();
572570
client_state.incoming_messages.extend(decoded.publish);
573571

574572
let subscriptions = decoded.subscriptions;
@@ -585,10 +583,11 @@ impl P2pNetworkPubsubState {
585583
if err.to_string().contains("buffer underflow") && client_state.buffer.is_empty() {
586584
// Incomplete data, keep in buffer, should be completed later
587585
client_state.buffer = data.to_vec();
586+
} else {
587+
// Clear the buffer for other decoding errors, otherwise this will cause issues
588+
// with any data we receive later.
589+
client_state.clear_buffer();
588590
}
589-
590-
// TODO: handle other errors
591-
// TODO: if the error is not a buffer underflow, buffer needs to be cleared.
592591
}
593592
}
594593

p2p/src/network/pubsub/p2p_network_pubsub_state.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,11 @@ impl P2pNetworkPubsubClientState {
113113
}
114114
}
115115
}
116+
117+
pub fn clear_buffer(&mut self) {
118+
self.buffer.clear();
119+
self.buffer.shrink_to(0x2000);
120+
}
116121
}
117122

118123
#[derive(Default, Serialize, Deserialize, Debug, Clone)]

0 commit comments

Comments
 (0)