From f3d82d79a6e9413f3869dfef42d4f28fd96b4935 Mon Sep 17 00:00:00 2001 From: est31 Date: Mon, 25 Jan 2021 17:32:56 +0100 Subject: [PATCH] Don't assume representation of Ipv*Addr types Also, remove two uses of unsafe :) --- quinn/src/platform/unix.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/quinn/src/platform/unix.rs b/quinn/src/platform/unix.rs index 117f9957b..95ec7716e 100644 --- a/quinn/src/platform/unix.rs +++ b/quinn/src/platform/unix.rs @@ -2,7 +2,7 @@ use std::{ io, io::IoSliceMut, mem::{self, MaybeUninit}, - net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr, SocketAddrV4, SocketAddrV6}, + net::{IpAddr, SocketAddr, SocketAddrV4, SocketAddrV6}, os::unix::io::AsRawFd, ptr, task::{Context, Poll}, @@ -375,8 +375,8 @@ fn prepare_msg( IpAddr::V4(v4) => { let pktinfo = libc::in_pktinfo { ipi_ifindex: 0, - ipi_spec_dst: unsafe { - *(v4 as *const Ipv4Addr as *const () as *const libc::in_addr) + ipi_spec_dst: libc::in_addr { + s_addr: u32::from_ne_bytes(v4.octets()), }, ipi_addr: libc::in_addr { s_addr: 0 }, }; @@ -385,8 +385,8 @@ fn prepare_msg( IpAddr::V6(v6) => { let pktinfo = libc::in6_pktinfo { ipi6_ifindex: 0, - ipi6_addr: unsafe { - *(v6 as *const Ipv6Addr as *const () as *const libc::in6_addr) + ipi6_addr: libc::in6_addr { + s6_addr: v6.octets(), }, }; encoder.push(libc::IPPROTO_IPV6, libc::IPV6_PKTINFO, pktinfo);