@@ -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