From cf1a3769cbe2e5d5c92e4660b4e04f3119c2463e Mon Sep 17 00:00:00 2001 From: Santiago Gimeno Date: Thu, 23 Nov 2023 16:00:51 +0100 Subject: [PATCH] agents: fix crash in StatsDAgent With some specific udp send errors, it's not possible to retrieve the peername. Handle this case to avoid crashes. Fixes: https://github.com/nodesource/nsolid/issues/31 --- agents/statsd/src/statsd_agent.cc | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/agents/statsd/src/statsd_agent.cc b/agents/statsd/src/statsd_agent.cc index 9428796b61..bfcf59c9a9 100644 --- a/agents/statsd/src/statsd_agent.cc +++ b/agents/statsd/src/statsd_agent.cc @@ -264,9 +264,13 @@ void StatsDUdp::write_cb_(nsuv::ns_udp_send* req, int status, StatsDUdp* udp) { struct sockaddr_storage ss; struct sockaddr* addr = reinterpret_cast(&ss); int len = sizeof(ss); - ASSERT_EQ(0, uv_udp_getpeername(req->handle(), addr, &len)); - Debug("Error '%s' sending data to: %s.\n", - uv_err_name(status), addr_to_string(addr).c_str()); + int r = uv_udp_getpeername(req->handle(), addr, &len); + if (r == 0) { + Debug("Error '%s' sending data to: %s.\n", + uv_err_name(status), addr_to_string(addr).c_str()); + } else { + Debug("Error '%s' sending data to\n", uv_err_name(status)); + } } udp_req_data_tup* req_data = req->get_data();