From b9e431d15a7e0e12ef9ca2264ccdf5de282bc04c Mon Sep 17 00:00:00 2001 From: ABHAY PANDEY Date: Sun, 17 May 2026 21:21:26 +0530 Subject: [PATCH] fix: configuration parsing edge cases and startup panics Signed-off-by: ABHAY PANDEY --- ldk-server/src/util/config.rs | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/ldk-server/src/util/config.rs b/ldk-server/src/util/config.rs index 24e31c81..e3c75ccd 100644 --- a/ldk-server/src/util/config.rs +++ b/ldk-server/src/util/config.rs @@ -387,6 +387,13 @@ impl ConfigBuilder { let poll_metrics_interval = self.poll_metrics_interval; + if let Some(0) = poll_metrics_interval { + return Err(io::Error::new( + io::ErrorKind::InvalidInput, + "poll_metrics_interval must be greater than 0", + )); + } + let metrics_username = self.metrics_username; let metrics_password = self.metrics_password; @@ -597,7 +604,11 @@ fn parse_dns_server_address(addr: &str) -> io::Result { if let Ok(sa) = SocketAddress::from_str(addr) { return Ok(sa); } - let with_default_port = format!("{}:53", addr); + let with_default_port = if addr.contains(':') && !addr.starts_with('[') { + format!("[{}]:53", addr) + } else { + format!("{}:53", addr) + }; SocketAddress::from_str(&with_default_port).map_err(|e| { io::Error::new( io::ErrorKind::InvalidInput, @@ -1714,4 +1725,25 @@ mod tests { assert_eq!(err.kind(), io::ErrorKind::InvalidInput); assert!(err.to_string().contains("enable_resolution_service")); } + + #[test] + fn test_parse_dns_server_address() { + assert_eq!( + parse_dns_server_address("8.8.8.8:53").unwrap(), + SocketAddress::from_str("8.8.8.8:53").unwrap() + ); + assert_eq!( + parse_dns_server_address("1.1.1.1").unwrap(), + SocketAddress::from_str("1.1.1.1:53").unwrap() + ); + assert_eq!( + parse_dns_server_address("[2001:db8::1]:53").unwrap(), + SocketAddress::from_str("[2001:db8::1]:53").unwrap() + ); + assert_eq!( + parse_dns_server_address("2001:db8::1").unwrap(), + SocketAddress::from_str("[2001:db8::1]:53").unwrap() + ); + assert!(parse_dns_server_address("invalid@address").is_err()); + } }