From 96b0f4c2d3f61863b1499037d3a738f73cb4511a Mon Sep 17 00:00:00 2001 From: Andrea Ciliberti Date: Wed, 21 Aug 2024 13:05:36 +0200 Subject: [PATCH] Consider zeroed bytes in sockaddr_in for HorizonOS --- library/std/src/sys_common/net.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/library/std/src/sys_common/net.rs b/library/std/src/sys_common/net.rs index 25ebeb3502d20..0a59ec0bae378 100644 --- a/library/std/src/sys_common/net.rs +++ b/library/std/src/sys_common/net.rs @@ -110,7 +110,13 @@ where pub fn sockaddr_to_addr(storage: &c::sockaddr_storage, len: usize) -> io::Result { match storage.ss_family as c_int { c::AF_INET => { + #[cfg(not(target_os = "horizon"))] assert!(len >= mem::size_of::()); + + // Under HorizonOS, sockaddr_in has 8 zeroed trailing bytes that do not get written. + #[cfg(target_os = "horizon")] + assert!(len >= (mem::size_of::() - mem::size_of::<[c::c_char; 8]>())); + Ok(SocketAddr::V4(FromInner::from_inner(unsafe { *(storage as *const _ as *const c::sockaddr_in) })))