diff --git a/GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/NetworkMesh.cpp b/GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/NetworkMesh.cpp index 8d5319cf0c3..da4a053b314 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/NetworkMesh.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/NetworkMesh.cpp @@ -484,6 +484,13 @@ class CSignalingClient : public ISignalingClient std::vector signalData = pendingSignals.front(); pendingSignals.pop(); + // Validate payload is not empty to prevent crashes in OpenSSL CMP validation + if (signalData.empty()) + { + NetworkLog(ELogVerbosity::LOG_RELEASE, "[SIGNAL] Warning: Skipping empty signal data"); + continue; + } + // Setup a context object that can respond if this signal is a connection request. struct Context : ISteamNetworkingSignalingRecvContext { diff --git a/GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/OnlineServices_RoomsInterface.cpp b/GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/OnlineServices_RoomsInterface.cpp index 11f938ecf16..a24b75f855a 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/OnlineServices_RoomsInterface.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/OnlineServices_RoomsInterface.cpp @@ -961,7 +961,15 @@ void WebSocket::Tick() { NetworkLog(ELogVerbosity::LOG_RELEASE, "[SIGNAL] Signal User: %lld!", signalData.target_user_id); NetworkLog(ELogVerbosity::LOG_RELEASE, "[SIGNAL] Signal Payload Size: %d!", (int)signalData.payload.size()); - m_pendingSignals.push(signalData.payload); + // Validate payload is not empty to prevent crashes in OpenSSL CMP validation + if (signalData.payload.size() > 0) + { + m_pendingSignals.push(signalData.payload); + } + else + { + NetworkLog(ELogVerbosity::LOG_RELEASE, "[SIGNAL] Warning: Ignoring empty signal payload from user %lld", signalData.target_user_id); + } } } break; @@ -1361,4 +1369,4 @@ void NGMP_OnlineServices_RoomsInterface::OnRosterUpdated(std::vector