Fix various edge-cases in network replication system to avoid crashes

This commit is contained in:
2026-09-04 12:08:34 +02:00
parent 83bb6fa632
commit 8f163632a7
2 changed files with 58 additions and 14 deletions
+7 -2
View File
@@ -280,6 +280,11 @@ void OnNetworkMessageHandshake(NetworkEvent& event, NetworkClient* client, Netwo
connectionData.Result = 0;
connectionData.Platform = (PlatformType)msgData.Platform;
connectionData.Architecture = (ArchitectureType)msgData.Architecture;
if (event.Message.Position + msgData.PayloadDataSize > event.Message.BufferSize)
{
LOG(Warning, "Invalid payload data size from client id={1}", connectionData.Result, event.Sender.ConnectionId);
return;
}
connectionData.PayloadData.Resize(msgData.PayloadDataSize);
event.Message.ReadBytes(connectionData.PayloadData.Get(), msgData.PayloadDataSize);
if (msgData.EngineProtocolVersion != NETWORK_PROTOCOL_VERSION ||
@@ -300,7 +305,7 @@ void OnNetworkMessageHandshake(NetworkEvent& event, NetworkClient* client, Netwo
// Update client based on connection result
if (connectionData.Result != 0)
{
LOG(Info, "Connection blocked with result {0} from client id={1}.", connectionData.Result, event.Sender.ConnectionId);
LOG(Info, "Connection blocked with result {0} from client id={1}", connectionData.Result, event.Sender.ConnectionId);
client->State = NetworkConnectionState::Disconnecting;
peer->Disconnect(event.Sender);
client->State = NetworkConnectionState::Disconnected;
@@ -753,7 +758,7 @@ void NetworkManagerService::Update()
NetworkManager::ClientConnecting(connectionData); // Allow client to validate connection or inject custom connection data
if (connectionData.Result != 0)
{
LOG(Info, "Connection blocked with result {0}.", connectionData.Result);
LOG(Info, "Connection blocked with result {0}", connectionData.Result);
NetworkManager::Stop();
break;
}