Skip to content

Commit 8602c01

Browse files
authored
Merge pull request #986 from birdistheword96/main
Prevent Panic in DNS Socket by Truncating Server List
2 parents 8025752 + 4739cc7 commit 8602c01

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

src/socket/dns.rs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use core::cmp::min;
12
#[cfg(feature = "async")]
23
use core::task::Waker;
34

@@ -149,27 +150,30 @@ pub struct Socket<'a> {
149150
impl<'a> Socket<'a> {
150151
/// Create a DNS socket.
151152
///
152-
/// # Panics
153-
///
154-
/// Panics if `servers.len() > MAX_SERVER_COUNT`
153+
/// Truncates the server list if `servers.len() > MAX_SERVER_COUNT`
155154
pub fn new<Q>(servers: &[IpAddress], queries: Q) -> Socket<'a>
156155
where
157156
Q: Into<ManagedSlice<'a, Option<DnsQuery>>>,
158157
{
158+
let truncated_servers = &servers[..min(servers.len(), DNS_MAX_SERVER_COUNT)];
159+
159160
Socket {
160-
servers: Vec::from_slice(servers).unwrap(),
161+
servers: Vec::from_slice(truncated_servers).unwrap(),
161162
queries: queries.into(),
162163
hop_limit: None,
163164
}
164165
}
165166

166167
/// Update the list of DNS servers, will replace all existing servers
167168
///
168-
/// # Panics
169-
///
170-
/// Panics if `servers.len() > MAX_SERVER_COUNT`
169+
/// Truncates the server list if `servers.len() > MAX_SERVER_COUNT`
171170
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+
}
173177
}
174178

175179
/// Return the time-to-live (IPv4) or hop limit (IPv6) value used in outgoing packets.

0 commit comments

Comments
 (0)