diff options
| author | 魏曹先生 <1992414357@qq.com> | 2026-01-23 03:53:44 +0800 |
|---|---|---|
| committer | 魏曹先生 <1992414357@qq.com> | 2026-01-23 03:53:44 +0800 |
| commit | 057b1990d3938c0b38ba81675ae1da66ce484e6f (patch) | |
| tree | 08635a672a39b7187f98fd6c169a60e5942cd3da /src | |
| parent | ab3e1867bf54f6dbb10b80aac159ad52303166a3 (diff) | |
Fix empty address handling in socket address parser
Diffstat (limited to 'src')
| -rw-r--r-- | src/utils/socket_addr_helper.rs | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/src/utils/socket_addr_helper.rs b/src/utils/socket_addr_helper.rs index fd7b346..29ccd9f 100644 --- a/src/utils/socket_addr_helper.rs +++ b/src/utils/socket_addr_helper.rs @@ -8,6 +8,14 @@ pub async fn get_socket_addr( ) -> Result<SocketAddr, std::io::Error> { let address = address_str.as_ref().trim(); + // Return error if input is empty after trimming + if address.is_empty() { + return Err(std::io::Error::new( + std::io::ErrorKind::InvalidInput, + "Empty address string", + )); + } + // Check if the address contains a port if let Some((host, port_str)) = parse_host_and_port(address) { let port = port_str.parse::<u16>().map_err(|e| { @@ -28,11 +36,13 @@ pub async fn get_socket_addr( fn parse_host_and_port(address: &str) -> Option<(&str, &str)> { if address.starts_with('[') && let Some(close_bracket) = address.find(']') - && close_bracket + 1 < address.len() && address.as_bytes()[close_bracket + 1] == b':' { - let host = &address[1..close_bracket]; - let port = &address[close_bracket + 2..]; - return Some((host, port)); - } + && close_bracket + 1 < address.len() + && address.as_bytes()[close_bracket + 1] == b':' + { + let host = &address[1..close_bracket]; + let port = &address[close_bracket + 2..]; + return Some((host, port)); + } // Handle IPv4 addresses and hostnames with ports if let Some(colon_pos) = address.rfind(':') { |
