Skip to content

Commit b9e431d

Browse files
committed
fix: configuration parsing edge cases and startup panics
Signed-off-by: ABHAY PANDEY <pandeyabhay967@gmail.com>
1 parent d1a0f9d commit b9e431d

1 file changed

Lines changed: 33 additions & 1 deletion

File tree

ldk-server/src/util/config.rs

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,13 @@ impl ConfigBuilder {
387387

388388
let poll_metrics_interval = self.poll_metrics_interval;
389389

390+
if let Some(0) = poll_metrics_interval {
391+
return Err(io::Error::new(
392+
io::ErrorKind::InvalidInput,
393+
"poll_metrics_interval must be greater than 0",
394+
));
395+
}
396+
390397
let metrics_username = self.metrics_username;
391398
let metrics_password = self.metrics_password;
392399

@@ -597,7 +604,11 @@ fn parse_dns_server_address(addr: &str) -> io::Result<SocketAddress> {
597604
if let Ok(sa) = SocketAddress::from_str(addr) {
598605
return Ok(sa);
599606
}
600-
let with_default_port = format!("{}:53", addr);
607+
let with_default_port = if addr.contains(':') && !addr.starts_with('[') {
608+
format!("[{}]:53", addr)
609+
} else {
610+
format!("{}:53", addr)
611+
};
601612
SocketAddress::from_str(&with_default_port).map_err(|e| {
602613
io::Error::new(
603614
io::ErrorKind::InvalidInput,
@@ -1714,4 +1725,25 @@ mod tests {
17141725
assert_eq!(err.kind(), io::ErrorKind::InvalidInput);
17151726
assert!(err.to_string().contains("enable_resolution_service"));
17161727
}
1728+
1729+
#[test]
1730+
fn test_parse_dns_server_address() {
1731+
assert_eq!(
1732+
parse_dns_server_address("8.8.8.8:53").unwrap(),
1733+
SocketAddress::from_str("8.8.8.8:53").unwrap()
1734+
);
1735+
assert_eq!(
1736+
parse_dns_server_address("1.1.1.1").unwrap(),
1737+
SocketAddress::from_str("1.1.1.1:53").unwrap()
1738+
);
1739+
assert_eq!(
1740+
parse_dns_server_address("[2001:db8::1]:53").unwrap(),
1741+
SocketAddress::from_str("[2001:db8::1]:53").unwrap()
1742+
);
1743+
assert_eq!(
1744+
parse_dns_server_address("2001:db8::1").unwrap(),
1745+
SocketAddress::from_str("[2001:db8::1]:53").unwrap()
1746+
);
1747+
assert!(parse_dns_server_address("invalid@address").is_err());
1748+
}
17171749
}

0 commit comments

Comments
 (0)