diff --git a/bin/ssurl.rs b/bin/ssurl.rs index c94fbaa7..bdba3708 100644 --- a/bin/ssurl.rs +++ b/bin/ssurl.rs @@ -158,5 +158,5 @@ fn main() -> ExitCode { } println!("Use -h for more detail"); - return ExitCode::FAILURE; + ExitCode::FAILURE } diff --git a/crates/shadowsocks-service/src/local/http/http_client.rs b/crates/shadowsocks-service/src/local/http/http_client.rs index b2c13151..784b7d29 100644 --- a/crates/shadowsocks-service/src/local/http/http_client.rs +++ b/crates/shadowsocks-service/src/local/http/http_client.rs @@ -39,6 +39,7 @@ pub enum HttpClientError { #[derive(Clone)] pub struct HttpClient { + #[allow(clippy::type_complexity)] cache_conn: Arc>>>, } @@ -96,7 +97,7 @@ impl HttpClient { } async fn get_cached_connection(&self, host: &Address) -> Option { - if let Some(q) = self.cache_conn.lock().await.get_mut(&host) { + if let Some(q) = self.cache_conn.lock().await.get_mut(host) { while let Some((c, inst)) = q.pop_front() { let now = Instant::now(); if now - inst >= CONNECTION_EXPIRE_DURATION { diff --git a/crates/shadowsocks-service/src/local/redir/sys/unix/bsd_pf.rs b/crates/shadowsocks-service/src/local/redir/sys/unix/bsd_pf.rs index 61b08c9c..b7782079 100644 --- a/crates/shadowsocks-service/src/local/redir/sys/unix/bsd_pf.rs +++ b/crates/shadowsocks-service/src/local/redir/sys/unix/bsd_pf.rs @@ -61,7 +61,7 @@ impl PacketFilter { match proto { Protocol::TCP => self.tcp_natlook(bind_addr, peer_addr, proto), Protocol::UDP => self.udp_natlook(bind_addr, peer_addr, proto), - _ => return Err(io::ErrorKind::InvalidInput.into()), + _ => Err(io::ErrorKind::InvalidInput.into()), } } @@ -81,12 +81,7 @@ impl PacketFilter { let addr: *const in_addr = ptr::addr_of!((*sockaddr).sin_addr) as *const _; let port: libc::in_port_t = (*sockaddr).sin_port; - #[allow(clippy::size_of_in_element_count)] - ptr::copy_nonoverlapping( - addr, - ptr::addr_of_mut!(pnl.daddr.pfa) as *mut _, - mem::size_of::(), - ); + ptr::write_unaligned::(ptr::addr_of_mut!(pnl.daddr.pfa) as *mut _, *addr); cfg_if! { if #[cfg(any(target_os = "macos", target_os = "ios"))] { @@ -105,12 +100,7 @@ impl PacketFilter { let addr: *const in6_addr = ptr::addr_of!((*sockaddr).sin6_addr) as *const _; let port: libc::in_port_t = (*sockaddr).sin6_port; - #[allow(clippy::size_of_in_element_count)] - ptr::copy_nonoverlapping( - addr, - ptr::addr_of_mut!(pnl.daddr.pfa) as *mut _, - mem::size_of::(), - ); + ptr::write_unaligned::(ptr::addr_of_mut!(pnl.daddr.pfa) as *mut _, *addr); cfg_if! { if #[cfg(any(target_os = "macos", target_os = "ios"))] { @@ -134,12 +124,7 @@ impl PacketFilter { let addr: *const in_addr = ptr::addr_of!((*sockaddr).sin_addr) as *const _; let port: libc::in_port_t = (*sockaddr).sin_port; - #[allow(clippy::size_of_in_element_count)] - ptr::copy_nonoverlapping( - addr, - ptr::addr_of_mut!(pnl.saddr.pfa) as *mut _, - mem::size_of::(), - ); + ptr::write_unaligned::(ptr::addr_of_mut!(pnl.saddr.pfa) as *mut _, *addr); cfg_if! { if #[cfg(any(target_os = "macos", target_os = "ios"))] { @@ -160,12 +145,7 @@ impl PacketFilter { let addr: *const in6_addr = ptr::addr_of!((*sockaddr).sin6_addr) as *const _; let port: libc::in_port_t = (*sockaddr).sin6_port; - #[allow(clippy::size_of_in_element_count)] - ptr::copy_nonoverlapping( - addr, - ptr::addr_of_mut!(pnl.saddr.pfa) as *mut _, - mem::size_of::(), - ); + ptr::write_unaligned::(ptr::addr_of_mut!(pnl.saddr.pfa) as *mut _, *addr); cfg_if! { if #[cfg(any(target_os = "macos", target_os = "ios"))] { @@ -197,11 +177,9 @@ impl PacketFilter { } } - #[allow(clippy::size_of_in_element_count)] - ptr::copy_nonoverlapping( - ptr::addr_of!(pnl.rdaddr.pfa) as *const _, + ptr::write_unaligned::( ptr::addr_of_mut!(dst_addr.sin_addr), - mem::size_of_val(&dst_addr.sin_addr), + ptr::read::(ptr::addr_of!(pnl.rdaddr.pfa) as *const _), ); *addr_len = mem::size_of_val(&dst_addr.sin_addr) as libc::socklen_t; } else if pnl.af == libc::AF_INET6 as libc::sa_family_t { @@ -216,11 +194,9 @@ impl PacketFilter { } } - #[allow(clippy::size_of_in_element_count)] - ptr::copy_nonoverlapping( - ptr::addr_of!(pnl.rdaddr.pfa) as *const _, + ptr::write_unaligned::( ptr::addr_of_mut!(dst_addr.sin6_addr), - mem::size_of_val(&dst_addr.sin6_addr), + ptr::read::(ptr::addr_of!(pnl.rdaddr.pfa) as *const _), ); *addr_len = mem::size_of_val(&dst_addr.sin6_addr) as libc::socklen_t; } else { @@ -270,18 +246,16 @@ impl PacketFilter { match bind_addr_sockaddr.family() as libc::c_int { libc::AF_INET => { let sockaddr: *const sockaddr_in = bind_addr_sockaddr.as_ptr() as *const _; - ptr::copy_nonoverlapping( - ptr::addr_of!((&*sockaddr).sin_addr), + ptr::write_unaligned::( ptr::addr_of_mut!(bind_addr_pfaddr.pfa) as *mut _, - mem::size_of::(), + (*sockaddr).sin_addr, ); } libc::AF_INET6 => { let sockaddr: *const sockaddr_in6 = bind_addr_sockaddr.as_ptr() as *const _; - ptr::copy_nonoverlapping( - ptr::addr_of!((&*sockaddr).sin6_addr), + ptr::write_unaligned::( ptr::addr_of_mut!(bind_addr_pfaddr.pfa) as *mut _, - mem::size_of::(), + (*sockaddr).sin6_addr, ); } _ => unreachable!("bind_addr family = {}", bind_addr_sockaddr.family()), @@ -290,18 +264,16 @@ impl PacketFilter { match peer_addr_sockaddr.family() as libc::c_int { libc::AF_INET => { let sockaddr: *const sockaddr_in = peer_addr_sockaddr.as_ptr() as *const _; - ptr::copy_nonoverlapping( - ptr::addr_of!((&*sockaddr).sin_addr), + ptr::write_unaligned::( ptr::addr_of_mut!(peer_addr_pfaddr.pfa) as *mut _, - mem::size_of::(), + (*sockaddr).sin_addr, ); } libc::AF_INET6 => { let sockaddr: *const sockaddr_in6 = peer_addr_sockaddr.as_ptr() as *const _; - ptr::copy_nonoverlapping( - ptr::addr_of!((&*sockaddr).sin6_addr), + ptr::write_unaligned::( ptr::addr_of_mut!(peer_addr_pfaddr.pfa) as *mut _, - mem::size_of::(), + (*sockaddr).sin6_addr, ); } _ => unreachable!("peer_addr family = {}", peer_addr_sockaddr.family()), @@ -341,10 +313,9 @@ impl PacketFilter { let (_, actual_dst_addr) = SockAddr::try_init(|sockaddr, len| { let addr = &mut *(sockaddr as *mut sockaddr_in); addr.sin_family = libc::AF_INET as libc::sa_family_t; - ptr::copy_nonoverlapping( - ptr::addr_of!(state.gwy.addr.pfa) as *const _, + ptr::write_unaligned::( ptr::addr_of_mut!(addr.sin_addr), - mem::size_of::(), + ptr::read_unaligned::(ptr::addr_of!(state.gwy.addr.pfa) as *const _), ); addr.sin_port = actual_dst_port as libc::in_port_t; @@ -359,10 +330,9 @@ impl PacketFilter { let (_, actual_dst_addr) = SockAddr::try_init(|sockaddr, len| { let addr = &mut *(sockaddr as *mut sockaddr_in6); addr.sin6_family = libc::AF_INET6 as libc::sa_family_t; - ptr::copy_nonoverlapping( - ptr::addr_of!(state.gwy.addr.pfa) as *const _, + ptr::write_unaligned::( ptr::addr_of_mut!(addr.sin6_addr), - mem::size_of::(), + ptr::read_unaligned::(ptr::addr_of!(state.gwy.addr.pfa) as *const _), ); addr.sin6_port = actual_dst_port as libc::in_port_t; diff --git a/crates/shadowsocks-service/src/local/redir/sys/unix/mod.rs b/crates/shadowsocks-service/src/local/redir/sys/unix/mod.rs index fa9bc724..7a080386 100644 --- a/crates/shadowsocks-service/src/local/redir/sys/unix/mod.rs +++ b/crates/shadowsocks-service/src/local/redir/sys/unix/mod.rs @@ -13,10 +13,12 @@ cfg_if! { target_os = "ios"))] { #[path = "pfvar_bindgen_macos.rs"] #[allow(dead_code, non_upper_case_globals, non_snake_case, non_camel_case_types)] + #[allow(clippy::useless_transmute)] mod pfvar; } else if #[cfg(target_os = "freebsd")] { #[path = "pfvar_bindgen_freebsd.rs"] #[allow(dead_code, non_upper_case_globals, non_snake_case, non_camel_case_types)] + #[allow(clippy::useless_transmute)] mod pfvar; } } diff --git a/crates/shadowsocks-service/src/manager/server.rs b/crates/shadowsocks-service/src/manager/server.rs index f281ef9c..6b16035d 100644 --- a/crates/shadowsocks-service/src/manager/server.rs +++ b/crates/shadowsocks-service/src/manager/server.rs @@ -417,7 +417,12 @@ impl Manager { let config_file_content = format!("{config}"); - match OpenOptions::new().write(true).create(true).open(&config_file_path) { + match OpenOptions::new() + .write(true) + .create(true) + .truncate(true) + .open(&config_file_path) + { Err(err) => { error!( "failed to open {} for writing, error: {}", diff --git a/crates/shadowsocks-service/src/sys/unix/macos.rs b/crates/shadowsocks-service/src/sys/unix/macos.rs index 0e887d65..71f36283 100644 --- a/crates/shadowsocks-service/src/sys/unix/macos.rs +++ b/crates/shadowsocks-service/src/sys/unix/macos.rs @@ -59,7 +59,7 @@ pub fn get_launch_activate_socket(name: &str) -> io::Result { } else if cnt > 1 { for idx in 0..cnt { unsafe { - let fd = *(fds.offset(idx as isize)); + let fd = *(fds.add(idx)); let _ = libc::close(fd); } } diff --git a/crates/shadowsocks/src/config.rs b/crates/shadowsocks/src/config.rs index 110781fa..50800982 100644 --- a/crates/shadowsocks/src/config.rs +++ b/crates/shadowsocks/src/config.rs @@ -633,7 +633,7 @@ impl ServerConfig { if #[cfg(feature = "aead-cipher-2022")] { let user_info = if !self.method().is_aead_2022() { let user_info = format!("{}:{}", self.method(), self.password()); - URL_PASSWORD_BASE64_ENGINE.encode(&user_info) + URL_PASSWORD_BASE64_ENGINE.encode(user_info) } else { format!("{}:{}", self.method(), percent_encoding::utf8_percent_encode(self.password(), percent_encoding::NON_ALPHANUMERIC)) }; diff --git a/crates/shadowsocks/src/net/udp.rs b/crates/shadowsocks/src/net/udp.rs index 18284347..55fbc011 100644 --- a/crates/shadowsocks/src/net/udp.rs +++ b/crates/shadowsocks/src/net/udp.rs @@ -204,7 +204,7 @@ impl UdpSocket { // Check MTU if let Some(mtu) = self.mtu { if buf.len() > mtu { - return Err(make_mtu_error(buf.len(), mtu)).into(); + return Err(make_mtu_error(buf.len(), mtu)); } } @@ -229,7 +229,7 @@ impl UdpSocket { // Check MTU if let Some(mtu) = self.mtu { if buf.len() > mtu { - return Err(make_mtu_error(buf.len(), mtu)).into(); + return Err(make_mtu_error(buf.len(), mtu)); } } diff --git a/src/logging/mod.rs b/src/logging/mod.rs index b1d0692c..3973e569 100644 --- a/src/logging/mod.rs +++ b/src/logging/mod.rs @@ -55,7 +55,7 @@ pub fn init_with_config(bin_name: &str, config: &LogConfig) { }; let config = match debug_level { - 0 | 1 | 2 | 3 => logging_builder + 0..=3 => logging_builder .logger(Logger::builder().build(bin_name, l1)) .logger(Logger::builder().build("shadowsocks_rust", l1)) .logger(Logger::builder().build("shadowsocks", l1))