From 1c85e35ba2f5aa01a45b300231b140e5f0f787d4 Mon Sep 17 00:00:00 2001 From: Bryan Biedenkapp Date: Tue, 18 Mar 2025 09:39:58 -0400 Subject: [PATCH] correct possible buffer cleanup issues; --- src/fne/network/DiagNetwork.cpp | 13 +++++++++++-- src/fne/network/FNENetwork.cpp | 18 +++++++++++++++--- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/src/fne/network/DiagNetwork.cpp b/src/fne/network/DiagNetwork.cpp index 02a56930..567a6507 100644 --- a/src/fne/network/DiagNetwork.cpp +++ b/src/fne/network/DiagNetwork.cpp @@ -85,7 +85,8 @@ void DiagNetwork::processNetwork() ::memcpy(req->buffer, buffer.get(), length); if (!Thread::runAsThread(m_fneNetwork, threadedNetworkRx, req)) { - delete[] req->buffer; + if (req->buffer != nullptr) + delete[] req->buffer; delete req; return; } @@ -156,10 +157,18 @@ void* DiagNetwork::threadedNetworkRx(void* arg) FNENetwork* network = static_cast(req->obj); if (network == nullptr) { - delete req; + if (req != nullptr) { + if (req->buffer != nullptr) + delete[] req->buffer; + delete req; + } + return nullptr; } + if (req == nullptr) + return nullptr; + if (req->length > 0) { uint32_t peerId = req->fneHeader.getPeerId(); diff --git a/src/fne/network/FNENetwork.cpp b/src/fne/network/FNENetwork.cpp index c5a01aa8..d1b1bf0d 100644 --- a/src/fne/network/FNENetwork.cpp +++ b/src/fne/network/FNENetwork.cpp @@ -464,10 +464,18 @@ void* FNENetwork::threadedNetworkRx(void* arg) FNENetwork* network = static_cast(req->obj); if (network == nullptr) { - delete req; + if (req != nullptr) { + if (req->buffer != nullptr) + delete[] req->buffer; + delete req; + } + return nullptr; } + if (req == nullptr) + return nullptr; + if (req->length > 0) { uint32_t peerId = req->fneHeader.getPeerId(); uint32_t streamId = req->fneHeader.getStreamId(); @@ -512,7 +520,7 @@ void* FNENetwork::threadedNetworkRx(void* arg) LogError(LOG_NET, "PEER %u (%s) malformed packet (no stream ID for a call?)", peerId, peerIdentity.c_str()); if (req->buffer != nullptr) - delete req->buffer; + delete[] req->buffer; delete req; return nullptr; @@ -1726,10 +1734,14 @@ void* FNENetwork::threadedACLUpdate(void* arg) FNENetwork* network = static_cast(req->obj); if (network == nullptr) { - delete req; + if (req != nullptr) + delete req; return nullptr; } + if (req == nullptr) + return nullptr; + std::string peerIdentity = network->resolvePeerIdentity(req->peerId); FNEPeerConnection* connection = network->m_peers[req->peerId];