1
Fork 0

Make os/windows default to deny unsafe in unsafe

This commit is contained in:
Chris Denton 2024-07-15 07:10:41 +00:00
parent 2402e84e78
commit 3411a025d5
No known key found for this signature in database
GPG key ID: 713472F2F45627DE
4 changed files with 26 additions and 15 deletions

View file

@ -159,10 +159,12 @@ fn stdio_handle(raw: RawHandle) -> RawHandle {
impl FromRawHandle for fs::File { impl FromRawHandle for fs::File {
#[inline] #[inline]
unsafe fn from_raw_handle(handle: RawHandle) -> fs::File { unsafe fn from_raw_handle(handle: RawHandle) -> fs::File {
let handle = handle as sys::c::HANDLE; unsafe {
fs::File::from_inner(sys::fs::File::from_inner(FromInner::from_inner( let handle = handle as sys::c::HANDLE;
OwnedHandle::from_raw_handle(handle), fs::File::from_inner(sys::fs::File::from_inner(FromInner::from_inner(
))) OwnedHandle::from_raw_handle(handle),
)))
}
} }
} }
@ -260,24 +262,30 @@ impl AsRawSocket for net::UdpSocket {
impl FromRawSocket for net::TcpStream { impl FromRawSocket for net::TcpStream {
#[inline] #[inline]
unsafe fn from_raw_socket(sock: RawSocket) -> net::TcpStream { unsafe fn from_raw_socket(sock: RawSocket) -> net::TcpStream {
let sock = sys::net::Socket::from_inner(OwnedSocket::from_raw_socket(sock)); unsafe {
net::TcpStream::from_inner(sys_common::net::TcpStream::from_inner(sock)) let sock = sys::net::Socket::from_inner(OwnedSocket::from_raw_socket(sock));
net::TcpStream::from_inner(sys_common::net::TcpStream::from_inner(sock))
}
} }
} }
#[stable(feature = "from_raw_os", since = "1.1.0")] #[stable(feature = "from_raw_os", since = "1.1.0")]
impl FromRawSocket for net::TcpListener { impl FromRawSocket for net::TcpListener {
#[inline] #[inline]
unsafe fn from_raw_socket(sock: RawSocket) -> net::TcpListener { unsafe fn from_raw_socket(sock: RawSocket) -> net::TcpListener {
let sock = sys::net::Socket::from_inner(OwnedSocket::from_raw_socket(sock)); unsafe {
net::TcpListener::from_inner(sys_common::net::TcpListener::from_inner(sock)) let sock = sys::net::Socket::from_inner(OwnedSocket::from_raw_socket(sock));
net::TcpListener::from_inner(sys_common::net::TcpListener::from_inner(sock))
}
} }
} }
#[stable(feature = "from_raw_os", since = "1.1.0")] #[stable(feature = "from_raw_os", since = "1.1.0")]
impl FromRawSocket for net::UdpSocket { impl FromRawSocket for net::UdpSocket {
#[inline] #[inline]
unsafe fn from_raw_socket(sock: RawSocket) -> net::UdpSocket { unsafe fn from_raw_socket(sock: RawSocket) -> net::UdpSocket {
let sock = sys::net::Socket::from_inner(OwnedSocket::from_raw_socket(sock)); unsafe {
net::UdpSocket::from_inner(sys_common::net::UdpSocket::from_inner(sock)) let sock = sys::net::Socket::from_inner(OwnedSocket::from_raw_socket(sock));
net::UdpSocket::from_inner(sys_common::net::UdpSocket::from_inner(sock))
}
} }
} }

View file

@ -76,7 +76,7 @@ impl BorrowedSocket<'_> {
#[stable(feature = "io_safety", since = "1.63.0")] #[stable(feature = "io_safety", since = "1.63.0")]
pub const unsafe fn borrow_raw(socket: RawSocket) -> Self { pub const unsafe fn borrow_raw(socket: RawSocket) -> Self {
assert!(socket != sys::c::INVALID_SOCKET as RawSocket); assert!(socket != sys::c::INVALID_SOCKET as RawSocket);
Self { socket, _phantom: PhantomData } unsafe { Self { socket, _phantom: PhantomData } }
} }
} }
@ -201,8 +201,10 @@ impl IntoRawSocket for OwnedSocket {
impl FromRawSocket for OwnedSocket { impl FromRawSocket for OwnedSocket {
#[inline] #[inline]
unsafe fn from_raw_socket(socket: RawSocket) -> Self { unsafe fn from_raw_socket(socket: RawSocket) -> Self {
debug_assert_ne!(socket, sys::c::INVALID_SOCKET as RawSocket); unsafe {
Self { socket } debug_assert_ne!(socket, sys::c::INVALID_SOCKET as RawSocket);
Self { socket }
}
} }
} }

View file

@ -24,6 +24,7 @@
#![stable(feature = "rust1", since = "1.0.0")] #![stable(feature = "rust1", since = "1.0.0")]
#![doc(cfg(windows))] #![doc(cfg(windows))]
#![deny(unsafe_op_in_unsafe_fn)]
pub mod ffi; pub mod ffi;
pub mod fs; pub mod fs;

View file

@ -16,7 +16,7 @@ use crate::sys_common::{AsInner, AsInnerMut, FromInner, IntoInner};
#[stable(feature = "process_extensions", since = "1.2.0")] #[stable(feature = "process_extensions", since = "1.2.0")]
impl FromRawHandle for process::Stdio { impl FromRawHandle for process::Stdio {
unsafe fn from_raw_handle(handle: RawHandle) -> process::Stdio { unsafe fn from_raw_handle(handle: RawHandle) -> process::Stdio {
let handle = sys::handle::Handle::from_raw_handle(handle as *mut _); let handle = unsafe { sys::handle::Handle::from_raw_handle(handle as *mut _) };
let io = sys::process::Stdio::Handle(handle); let io = sys::process::Stdio::Handle(handle);
process::Stdio::from_inner(io) process::Stdio::from_inner(io)
} }
@ -407,7 +407,7 @@ impl CommandExt for process::Command {
attribute: usize, attribute: usize,
value: T, value: T,
) -> &mut process::Command { ) -> &mut process::Command {
self.as_inner_mut().raw_attribute(attribute, value); unsafe { self.as_inner_mut().raw_attribute(attribute, value) };
self self
} }
} }