From 0196c838460b99b747f409b16b5e61fe953dab16 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 17 Sep 2020 00:36:30 +0000 Subject: [PATCH] Fix panic in BanksServer (#12293) (#12295) Fixes #12167 (cherry picked from commit 3ecb390b101cf37afa82b0093a9210ed214db0c3) Co-authored-by: Greg Fitzgerald --- banks-server/src/banks_server.rs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/banks-server/src/banks_server.rs b/banks-server/src/banks_server.rs index 4ca0808afe..3d9e098e0c 100644 --- a/banks-server/src/banks_server.rs +++ b/banks-server/src/banks_server.rs @@ -23,7 +23,7 @@ use solana_sdk::{ use std::{ collections::HashMap, io, - net::SocketAddr, + net::{Ipv4Addr, SocketAddr}, sync::{ atomic::AtomicBool, mpsc::{channel, Receiver, Sender}, @@ -245,7 +245,12 @@ pub async fn start_tcp_server( .filter_map(|r| future::ready(r.ok())) .map(server::BaseChannel::with_defaults) // Limit channels to 1 per IP. - .max_channels_per_key(1, |t| t.as_ref().peer_addr().unwrap().ip()) + .max_channels_per_key(1, |t| { + t.as_ref() + .peer_addr() + .map(|x| x.ip()) + .unwrap_or_else(|_| Ipv4Addr::new(0, 0, 0, 0).into()) + }) // serve is generated by the service attribute. It takes as input any type implementing // the generated Banks trait. .map(move |chan| {