@@ -398,6 +398,13 @@ impl ConfigBuilder {
398398
399399 let poll_metrics_interval = self . poll_metrics_interval ;
400400
401+ if let Some ( 0 ) = poll_metrics_interval {
402+ return Err ( io:: Error :: new (
403+ io:: ErrorKind :: InvalidInput ,
404+ "poll_metrics_interval must be greater than 0" ,
405+ ) ) ;
406+ }
407+
401408 let metrics_username = self . metrics_username ;
402409 let metrics_password = self . metrics_password ;
403410
@@ -610,7 +617,11 @@ fn parse_dns_server_address(addr: &str) -> io::Result<SocketAddress> {
610617 if let Ok ( sa) = SocketAddress :: from_str ( addr) {
611618 return Ok ( sa) ;
612619 }
613- let with_default_port = format ! ( "{}:53" , addr) ;
620+ let with_default_port = if addr. contains ( ':' ) && !addr. starts_with ( '[' ) {
621+ format ! ( "[{}]:53" , addr)
622+ } else {
623+ format ! ( "{}:53" , addr)
624+ } ;
614625 SocketAddress :: from_str ( & with_default_port) . map_err ( |e| {
615626 io:: Error :: new (
616627 io:: ErrorKind :: InvalidInput ,
@@ -1757,4 +1768,25 @@ mod tests {
17571768 assert_eq ! ( err. kind( ) , io:: ErrorKind :: InvalidInput ) ;
17581769 assert ! ( err. to_string( ) . contains( "enable_resolution_service" ) ) ;
17591770 }
1771+
1772+ #[ test]
1773+ fn test_parse_dns_server_address ( ) {
1774+ assert_eq ! (
1775+ parse_dns_server_address( "8.8.8.8:53" ) . unwrap( ) ,
1776+ SocketAddress :: from_str( "8.8.8.8:53" ) . unwrap( )
1777+ ) ;
1778+ assert_eq ! (
1779+ parse_dns_server_address( "1.1.1.1" ) . unwrap( ) ,
1780+ SocketAddress :: from_str( "1.1.1.1:53" ) . unwrap( )
1781+ ) ;
1782+ assert_eq ! (
1783+ parse_dns_server_address( "[2001:db8::1]:53" ) . unwrap( ) ,
1784+ SocketAddress :: from_str( "[2001:db8::1]:53" ) . unwrap( )
1785+ ) ;
1786+ assert_eq ! (
1787+ parse_dns_server_address( "2001:db8::1" ) . unwrap( ) ,
1788+ SocketAddress :: from_str( "[2001:db8::1]:53" ) . unwrap( )
1789+ ) ;
1790+ assert ! ( parse_dns_server_address( "invalid@address" ) . is_err( ) ) ;
1791+ }
17601792}
0 commit comments