From 157ed4db6ebb0cc9b1c4ebfe22cd52ba271fdffd Mon Sep 17 00:00:00 2001 From: quaK Date: Thu, 1 May 2025 15:00:20 +0300 Subject: [PATCH] fix stack overflow --- src/client/component/network.cpp | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/client/component/network.cpp b/src/client/component/network.cpp index cea11644..3ef7b452 100644 --- a/src/client/component/network.cpp +++ b/src/client/component/network.cpp @@ -68,13 +68,6 @@ namespace network return utils::hook::invoke(0x1409B2250, client_num, from, msg, time); } - int dw_send_to_stub(const int length, const char* data, game::netadr_s* to) - { - sockaddr s = {}; - game::NetadrToSockadr(to, &s); - return sendto(*game::query_socket, data, length, 0, &s, sizeof(sockaddr)); - } - void sockadr_to_netadr(const sockaddr* s, game::netadr_s* a) { if (s->sa_family == 2) @@ -85,6 +78,18 @@ namespace network } } + int dw_send_to_stub(const int length, const char* data, game::netadr_s* to) + { + sockaddr s = {}; + game::NetadrToSockadr(to, &s); + const auto result = sendto(*game::query_socket, data, length, 0, &s, sizeof(sockaddr)); + if (result == SOCKET_ERROR) + { + console::warn("sendto failed: %s\n", std::system_category().message(GetLastError()).data()); + } + return result; + } + int dw_recv_from_stub(game::netadr_s* from, char* data, int maxsize) { sockaddr s = {}; @@ -249,19 +254,14 @@ namespace network void send_data(const game::netadr_s& address, const std::string& data) { auto size = static_cast(data.size()); + if (address.type == game::NA_LOOPBACK) { - if (size > 1280) - { - console::error("Packet was too long. Truncated!\n"); - size = 1280; - } - game::NET_SendLoopPacket(game::NS_CLIENT1, size, data.data(), &address); } - else + else if(address.type == game::NA_BROADCAST || address.type == game::NA_IP) { - game::Sys_SendPacket(size, data.data(), &address); + dw_send_to_stub(size, data.data(), const_cast(&address)); } }