File tree Expand file tree Collapse file tree 1 file changed +12
-8
lines changed Expand file tree Collapse file tree 1 file changed +12
-8
lines changed Original file line number Diff line number Diff line change
1
+ use core:: cmp:: min;
1
2
#[ cfg( feature = "async" ) ]
2
3
use core:: task:: Waker ;
3
4
@@ -149,27 +150,30 @@ pub struct Socket<'a> {
149
150
impl < ' a > Socket < ' a > {
150
151
/// Create a DNS socket.
151
152
///
152
- /// # Panics
153
- ///
154
- /// Panics if `servers.len() > MAX_SERVER_COUNT`
153
+ /// Truncates the server list if `servers.len() > MAX_SERVER_COUNT`
155
154
pub fn new < Q > ( servers : & [ IpAddress ] , queries : Q ) -> Socket < ' a >
156
155
where
157
156
Q : Into < ManagedSlice < ' a , Option < DnsQuery > > > ,
158
157
{
158
+ let truncated_servers = & servers[ ..min ( servers. len ( ) , DNS_MAX_SERVER_COUNT ) ] ;
159
+
159
160
Socket {
160
- servers : Vec :: from_slice ( servers ) . unwrap ( ) ,
161
+ servers : Vec :: from_slice ( truncated_servers ) . unwrap ( ) ,
161
162
queries : queries. into ( ) ,
162
163
hop_limit : None ,
163
164
}
164
165
}
165
166
166
167
/// Update the list of DNS servers, will replace all existing servers
167
168
///
168
- /// # Panics
169
- ///
170
- /// Panics if `servers.len() > MAX_SERVER_COUNT`
169
+ /// Truncates the server list if `servers.len() > MAX_SERVER_COUNT`
171
170
pub fn update_servers ( & mut self , servers : & [ IpAddress ] ) {
172
- self . servers = Vec :: from_slice ( servers) . unwrap ( ) ;
171
+ if servers. len ( ) > DNS_MAX_SERVER_COUNT {
172
+ net_trace ! ( "Max DNS Servers exceeded. Increase MAX_SERVER_COUNT" ) ;
173
+ self . servers = Vec :: from_slice ( & servers[ ..DNS_MAX_SERVER_COUNT ] ) . unwrap ( ) ;
174
+ } else {
175
+ self . servers = Vec :: from_slice ( servers) . unwrap ( ) ;
176
+ }
173
177
}
174
178
175
179
/// Return the time-to-live (IPv4) or hop limit (IPv6) value used in outgoing packets.
You can’t perform that action at this time.
0 commit comments