From d133d3db7699bdf61441764d4278533539208ee1 Mon Sep 17 00:00:00 2001 From: Kyle Huey Date: Mon, 9 Aug 2021 22:45:54 -0700 Subject: Relax assertions in sockaddr_storage_to_addr to match the documentation. Fixes #1479 --- src/sys/socket/mod.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/sys/socket') diff --git a/src/sys/socket/mod.rs b/src/sys/socket/mod.rs index 733bd660..f701a731 100644 --- a/src/sys/socket/mod.rs +++ b/src/sys/socket/mod.rs @@ -1780,21 +1780,21 @@ pub fn sockaddr_storage_to_addr( addr: &sockaddr_storage, len: usize) -> Result { - assert!(len <= mem::size_of::()); + assert!(len <= mem::size_of::()); if len < mem::size_of_val(&addr.ss_family) { return Err(Error::from(Errno::ENOTCONN)); } match c_int::from(addr.ss_family) { libc::AF_INET => { - assert_eq!(len as usize, mem::size_of::()); + assert!(len as usize >= mem::size_of::()); let sin = unsafe { *(addr as *const sockaddr_storage as *const sockaddr_in) }; Ok(SockAddr::Inet(InetAddr::V4(sin))) } libc::AF_INET6 => { - assert_eq!(len as usize, mem::size_of::()); + assert!(len as usize >= mem::size_of::()); let sin6 = unsafe { *(addr as *const _ as *const sockaddr_in6) }; @@ -1810,10 +1810,10 @@ pub fn sockaddr_storage_to_addr( #[cfg(any(target_os = "android", target_os = "linux"))] libc::AF_PACKET => { use libc::sockaddr_ll; + // Don't assert anything about the size. // Apparently the Linux kernel can return smaller sizes when // the value in the last element of sockaddr_ll (`sll_addr`) is // smaller than the declared size of that field - assert!(len as usize <= mem::size_of::()); let sll = unsafe { *(addr as *const _ as *const sockaddr_ll) }; -- cgit v1.2.3