Skip to content

Commit 0bf29a7

Browse files
committed
Correct underflow and prevent mesh exceeding mesh_n_high
1 parent 0e52451 commit 0bf29a7

File tree

1 file changed

+4
-5
lines changed

1 file changed

+4
-5
lines changed

protocols/gossipsub/src/behaviour.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1366,8 +1366,6 @@ where
13661366
tracing::error!(peer_id = %peer_id, "Peer non-existent when handling graft");
13671367
return;
13681368
};
1369-
// Needs to be here to comply with the borrow checker.
1370-
let is_outbound = connected_peer.outbound;
13711369

13721370
// For each topic, if a peer has grafted us, then we necessarily must be in their mesh
13731371
// and they must be subscribed to the topic. Ensure we have recorded the mapping.
@@ -1455,10 +1453,9 @@ where
14551453
}
14561454

14571455
// check mesh upper bound and only allow graft if the upper bound is not reached
1458-
// or if it is an outbound peer
14591456
let mesh_n_high = self.config.mesh_n_high_for_topic(&topic_hash);
14601457

1461-
if peers.len() >= mesh_n_high && !is_outbound {
1458+
if peers.len() >= mesh_n_high {
14621459
to_prune_topics.insert(topic_hash.clone());
14631460
continue;
14641461
}
@@ -2228,7 +2225,9 @@ where
22282225
score_p1.partial_cmp(&score_p2).unwrap_or(Ordering::Equal)
22292226
});
22302227
// shuffle everything except the last retain_scores many peers (the best ones)
2231-
shuffled[..peers.len() - self.config.retain_scores()].shuffle(&mut rng);
2228+
if peers.len() > self.config.retain_scores() {
2229+
shuffled[..peers.len() - self.config.retain_scores()].shuffle(&mut rng);
2230+
}
22322231

22332232
// count total number of outbound peers
22342233
let mut outbound = shuffled

0 commit comments

Comments
 (0)