From e0047c9cef5249069b06bebd1c018237a11036bc Mon Sep 17 00:00:00 2001 From: Max Lv Date: Wed, 14 Oct 2026 15:59:01 +0800 Subject: [PATCH] Keep clang-tidy clean in the relay engine --- src/relay/socket.cpp | 2 +- src/relay/udp.cpp | 11 +++++++++-- src/resolv.cpp | 2 +- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/relay/socket.cpp b/src/relay/socket.cpp index 1ab45a97..6087e5be 100644 --- a/src/relay/socket.cpp +++ b/src/relay/socket.cpp @@ -280,7 +280,7 @@ std::size_t encode_socks_host(const char *host, std::uint16_t port, std::uint8_t } out[at++] = 3; out[at++] = static_cast(n); - std::memcpy(out + at, host, n); + std::memcpy(out + at, host, n); // NOLINT(bugprone-not-null-terminated-result): binary, length-prefixed at += n; } std::memcpy(out + at, &be, 2); diff --git a/src/relay/udp.cpp b/src/relay/udp.cpp index bf5f6010..f8eda197 100644 --- a/src/relay/udp.cpp +++ b/src/relay/udp.cpp @@ -447,6 +447,9 @@ UdpSession *UdpRelay::session_for(std::uint8_t listener, const sockaddr_storage std::memcpy(raw.data(), &family, sizeof(int)); std::memcpy(raw.data() + sizeof(int), &client, sizeof(sockaddr_storage)); auto key = Key::from(raw); + if (!key) { + return nullptr; + } if (PoolPtr *found = sessions_.find(*key)) { return found->get(); } @@ -486,8 +489,9 @@ void UdpRelay::expire(UdpSession &session) noexcept if (verbose) { LOGI("[udp] connection timeout"); } - auto key = Key::from(session.key_); - (void)sessions_.take(*key); // the PoolPtr dies here and closes the session + if (auto key = Key::from(session.key_)) { + (void)sessions_.take(*key); // the PoolPtr dies here and closes the session + } } void UdpRelay::client_packet(Listener &listener, const sockaddr_storage &from, std::span packet, @@ -567,6 +571,9 @@ void UdpRelay::client_packet(Listener &listener, const sockaddr_storage &from, s RefPtr UdpRelay::shared_for(const std::array &id) noexcept { auto key = FixedKey::from(std::as_bytes(std::span(id))); + if (!key) { + return nullptr; + } std::uint64_t now = now_secs(); if (RefPtr *found = shared_.find(*key)) { (*found)->last_used = now; diff --git a/src/resolv.cpp b/src/resolv.cpp index 9d366eef..b3c521f0 100644 --- a/src/resolv.cpp +++ b/src/resolv.cpp @@ -113,7 +113,7 @@ resolv_shutdown(struct ss_loop *) static bool closed; closed = false; resolver->shutdown(ss::CloseCompletion([](void *, std::uint32_t) { closed = true; }, nullptr, 0)); - while (!closed) { + while (!closed) { // NOLINT(bugprone-infinite-loop): the completion callback sets it loop->run_nowait(); } std::destroy_at(resolver);