From 82003c9fd16406026a48882e3123e7cac2a3cf80 Mon Sep 17 00:00:00 2001 From: Laurence Tratt Date: Fri, 17 Feb 2023 11:25:52 +0000 Subject: [PATCH 1/2] Fix a number of easy Clippy suggestions. --- src/lib.rs | 34 +++++++++++++++++----------------- src/unix.rs | 4 ++-- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 6ac9f16..04106d9 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -238,15 +238,15 @@ impl Record { }; let keep_conn = content[2] & 1 == 1; Record::BeginRequest { - request_id: request_id, - role: role, - keep_conn: keep_conn + request_id, + role, + keep_conn } }, - 2 => Record::AbortRequest { request_id: request_id }, - 4 => Record::Params { request_id: request_id, content: content }, - 5 => Record::Stdin { request_id: request_id, content: content }, - 8 => Record::Data { request_id: request_id, content: content }, + 2 => Record::AbortRequest { request_id }, + 4 => Record::Params { request_id, content }, + 5 => Record::Stdin { request_id, content }, + 8 => Record::Data { request_id, content }, 9 => { let items = read_pairs(&mut Cursor::new(content))?; Record::GetValues(items.into_iter().map(|(key, _)| key).collect()) @@ -295,7 +295,7 @@ impl<'a> BufRead for Stdin<'a> { }, (Record::BeginRequest { request_id, .. }, _) => { Record::EndRequest { - request_id: request_id, + request_id, app_status: 0, protocol_status: ProtocolStatus::CantMpxConn, } @@ -426,7 +426,7 @@ impl Request { }, Record::BeginRequest { request_id, role: Err(_), .. } => { Record::EndRequest { - request_id: request_id, + request_id, app_status: 0, protocol_status: ProtocolStatus::UnknownRole }.send(&mut sock)?; @@ -451,7 +451,7 @@ impl Request { }, Record::BeginRequest { request_id, .. } => { Record::EndRequest { - request_id: request_id, + request_id, app_status: 0, protocol_status: ProtocolStatus::CantMpxConn, } @@ -479,11 +479,11 @@ impl Request { } } Ok(Request { - sock: sock, - id: id, - role: role, - params: params, - aborted: aborted, + sock, + id, + role, + params, + aborted, status: 0, buf: Vec::new(), pos: 0, @@ -498,7 +498,7 @@ impl Request { /// Retrieves the value of the given parameter name. pub fn param(&self, key: &str) -> Option { - self.params.get(key).map(|s| s.clone()) + self.params.get(key).cloned() } /// Iterates over the FastCGI parameters. @@ -570,7 +570,7 @@ fn run_transport(handler: F, transport: &mut Transport) where loop { let sock = match transport.accept() { Ok(sock) => sock, - Err(e) => panic!(e.to_string()), + Err(e) => panic!("{}", e.to_string()), }; let allow = match addrs { Some(ref addrs) => match sock.peer() { diff --git a/src/unix.rs b/src/unix.rs index e1519cb..4e9f01f 100644 --- a/src/unix.rs +++ b/src/unix.rs @@ -28,7 +28,7 @@ use std::io::{self, Read, Write}; use std::mem; use std::net::{Ipv4Addr, Ipv6Addr}; use std::os::unix::io::RawFd; -use std::ptr::{null_mut}; +use std::ptr::null_mut; const LISTENSOCK_FILENO: c::c_int = 0; @@ -52,7 +52,7 @@ impl Transport { pub fn accept(&mut self) -> io::Result { let res = unsafe { - c::accept(self.inner, 0 as *mut _, 0 as *mut _) + c::accept(self.inner, null_mut(), null_mut()) }; if res == -1 { Err(io::Error::last_os_error()) From d7ea93b5cb0ff3524e604cc665dfebe575cacea1 Mon Sep 17 00:00:00 2001 From: Laurence Tratt Date: Fri, 17 Feb 2023 11:33:25 +0000 Subject: [PATCH 2/2] Remove transmutes. Note that `write` only seems to be correct with `len` <= u16::MAX so I've changed the `assert` for that. If the `assert` passes the new `unwrap` should also be safe. [Whether the `u16::MAX` limit maximum is a good idea or not is beyond my ken!] --- src/lib.rs | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 04106d9..b4aa919 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -42,6 +42,7 @@ extern crate libc; use std::collections::{HashMap, HashSet}; +use std::convert::TryFrom; use std::io::{self, Read, Write, Cursor, BufRead}; use std::marker::{Send, Sync}; use std::mem; @@ -154,13 +155,9 @@ fn write_pairs(w: &mut W, pairs: Vec<(String, String)>) -> io::Result< #[inline] fn write_record(w: &mut W, record_type: u8, request_id: u16, content: &[u8]) -> io::Result<()> { - assert!(content.len() <= std::u32::MAX as usize); - let request_id = unsafe { - mem::transmute::<_, [u8; 2]>(request_id.to_be()) - }; - let content_length = unsafe { - mem::transmute::<_, [u8; 2]>((content.len() as u16).to_be()) - }; + assert!(content.len() <= std::u16::MAX as usize); + let request_id = request_id.to_be_bytes(); + let content_length = u16::try_from(content.len()).unwrap().to_be_bytes(); w.write_all(&[ 1, record_type, request_id[0], request_id[1], content_length[0], content_length[1], 0, 0, @@ -188,9 +185,7 @@ impl Record { fn send(self, w: &mut W) -> io::Result<()> { match self { Record::EndRequest { request_id, app_status, protocol_status } => { - let app_status = unsafe { - mem::transmute::<_, [u8; 4]>(app_status.to_be()) - }; + let app_status = app_status.to_be_bytes(); let protocol_status = match protocol_status { ProtocolStatus::RequestComplete => 0, ProtocolStatus::CantMpxConn => 1,