mirror of
https://github.com/alexgo-io/stacks-puppet-node.git
synced 2026-06-20 11:19:09 +08:00
Merge branch 'fix/net-event-id-tocttou' into feature/net-p2p-pingback
This commit is contained in:
@@ -1139,27 +1139,32 @@ impl PeerNetwork {
|
||||
let event_id = match self.network {
|
||||
Some(ref mut network) => {
|
||||
// add to poller
|
||||
match network.register(self.p2p_network_handle, hint_event_id, &client_sock) {
|
||||
let event_id = match network.register(self.p2p_network_handle, hint_event_id, &client_sock) {
|
||||
Ok(event_id) => event_id,
|
||||
Err(e) => {
|
||||
warn!("Failed to register {:?}: {:?}", &client_sock, &e);
|
||||
continue;
|
||||
}
|
||||
};
|
||||
|
||||
// event ID already used?
|
||||
if self.peers.contains_key(&event_id) {
|
||||
warn!("Already have an event {}: {:?}", event_id, self.peers.get(&event_id));
|
||||
let _ = network.deregister(event_id, &client_sock);
|
||||
continue;
|
||||
}
|
||||
|
||||
event_id
|
||||
},
|
||||
None => {
|
||||
test_debug!("{:?}: network not connected", &self.local_peer);
|
||||
return Err(net_error::NotConnected);
|
||||
}
|
||||
};
|
||||
|
||||
// event ID already used?
|
||||
if self.peers.contains_key(&event_id) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// start tracking it
|
||||
if let Err(_e) = self.register_peer(event_id, client_sock, false) {
|
||||
// NOTE: register_peer will deregister the socket for us
|
||||
continue;
|
||||
}
|
||||
registered.push(event_id);
|
||||
|
||||
@@ -182,8 +182,7 @@ impl NetworkState {
|
||||
}
|
||||
else {
|
||||
// not a server event
|
||||
error!("Not a server event ID: {}", &server_event_id);
|
||||
return Err(net_error::RegisterError);
|
||||
panic!("Not a server event ID: {}", &server_event_id);
|
||||
}
|
||||
|
||||
// if the event ID is in use, then find another one
|
||||
@@ -436,9 +435,6 @@ mod test {
|
||||
|
||||
// can't use non-server events
|
||||
assert_eq!(Err(net_error::RegisterError), ns.register(client_events[port - 49010], port - 49010 + 1, &sock));
|
||||
|
||||
// can'te use non-registered events
|
||||
assert_eq!(Err(net_error::RegisterError), ns.register(99, port - 49010 + 1, &sock));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -313,10 +313,13 @@ impl HttpPeer {
|
||||
|
||||
// event ID already used?
|
||||
if self.peers.contains_key(&event_id) {
|
||||
warn!("Already have an event {}: {:?}", event_id, self.peers.get(&event_id));
|
||||
let _ = network_state.deregister(event_id, &client_sock);
|
||||
continue;
|
||||
}
|
||||
|
||||
if let Err(_e) = self.register_http(network_state, chainstate, event_id, client_sock, None, None) {
|
||||
// NOTE: register_http will deregister the socket for us
|
||||
continue;
|
||||
}
|
||||
registered.push(event_id);
|
||||
|
||||
Reference in New Issue
Block a user