summaryrefslogtreecommitdiff
path: root/src/utils/socket_addr_helper.rs
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-01-23 03:53:44 +0800
committer魏曹先生 <1992414357@qq.com>2026-01-23 03:53:44 +0800
commit057b1990d3938c0b38ba81675ae1da66ce484e6f (patch)
tree08635a672a39b7187f98fd6c169a60e5942cd3da /src/utils/socket_addr_helper.rs
parentab3e1867bf54f6dbb10b80aac159ad52303166a3 (diff)
Fix empty address handling in socket address parser
Diffstat (limited to 'src/utils/socket_addr_helper.rs')
-rw-r--r--src/utils/socket_addr_helper.rs20
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(':') {