From 3a3b7a399ad15f5e754c042a86e0121593d35648 Mon Sep 17 00:00:00 2001 From: Greg Fitzgerald Date: Tue, 30 Jun 2020 09:57:16 -0600 Subject: [PATCH] Fix netutils test (#10842) --- Cargo.lock | 1 + net-utils/Cargo.toml | 1 + net-utils/src/lib.rs | 9 +++++++++ 3 files changed, 11 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index 3cbf215a67..d33d6fb106 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4386,6 +4386,7 @@ dependencies = [ "solana-version", "tokio 0.1.22", "tokio-codec", + "url 2.1.1", ] [[package]] diff --git a/net-utils/Cargo.toml b/net-utils/Cargo.toml index a9225990ea..6456f597cf 100644 --- a/net-utils/Cargo.toml +++ b/net-utils/Cargo.toml @@ -23,6 +23,7 @@ solana-logger = { path = "../logger", version = "1.3.0" } solana-version = { path = "../version", version = "1.3.0" } tokio = "0.1" tokio-codec = "0.1" +url = "2.1.1" [lib] name = "solana_net_utils" diff --git a/net-utils/src/lib.rs b/net-utils/src/lib.rs index d08e641b8f..71ecffe418 100644 --- a/net-utils/src/lib.rs +++ b/net-utils/src/lib.rs @@ -7,6 +7,7 @@ use std::io::{self, Read, Write}; use std::net::{IpAddr, SocketAddr, TcpListener, TcpStream, ToSocketAddrs, UdpSocket}; use std::sync::mpsc::channel; use std::time::Duration; +use url::Url; mod ip_echo_server; use ip_echo_server::IpEchoServerMessage; @@ -298,6 +299,14 @@ pub fn parse_port_range(port_range: &str) -> Option { } pub fn parse_host(host: &str) -> Result { + // First, check if the host syntax is valid. This check is needed because addresses + // such as `("localhost:1234", 0)` will resolve to IPs on some networks. + let parsed_url = Url::parse(&format!("http://{}", host)).map_err(|e| e.to_string())?; + if parsed_url.port().is_some() { + return Err(format!("Expected port in URL: {}", host)); + } + + // Next, check to see if it resolves to an IP address let ips: Vec<_> = (host, 0) .to_socket_addrs() .map_err(|err| err.to_string())?