From 914acc2e1bb13e585267288f63076ff8224e5791 Mon Sep 17 00:00:00 2001 From: Ray Date: Thu, 16 May 2024 21:30:35 +0200 Subject: [PATCH] Zero-terminate Data to prevent client-side bugs. - Fixes chat messages displaying stale memory as the client discards the data length. --- src/tool/Syroot.Worms.Worms2.GameServer/PacketConnection.cs | 6 ++++-- .../Syroot.Worms.Worms2.GameServer.csproj | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/tool/Syroot.Worms.Worms2.GameServer/PacketConnection.cs b/src/tool/Syroot.Worms.Worms2.GameServer/PacketConnection.cs index c0bbbf3..1e198bc 100644 --- a/src/tool/Syroot.Worms.Worms2.GameServer/PacketConnection.cs +++ b/src/tool/Syroot.Worms.Worms2.GameServer/PacketConnection.cs @@ -222,7 +222,7 @@ namespace Syroot.Worms.Worms2.GameServer + add(PacketField.Value4, packet.Value4, sizeof(int)) + add(PacketField.Value10, packet.Value10, sizeof(int)) + add(PacketField.DataLength, packet.Data, sizeof(int)) - + add(PacketField.Data, packet.Data, packet.Data?.Length ?? 0) + + add(PacketField.Data, packet.Data, (packet.Data?.Length ?? 0) + 1) + add(PacketField.Error, packet.Error, sizeof(int)) + add(PacketField.Name, packet.Name, 20) + add(PacketField.Session, packet.Session, Unsafe.SizeOf()); @@ -244,8 +244,10 @@ namespace Syroot.Worms.Worms2.GameServer if (packet.Value10 != null) writeInt(ref span, packet.Value10.Value); if (packet.Data != null) { - writeInt(ref span, packet.Data.Length); + writeInt(ref span, packet.Data.Length + 1); span = span.Slice(Encodings.Windows1252.GetBytes(packet.Data, span)); + span[0] = 0; + span = span.Slice(1); } if (packet.Error != null) writeInt(ref span, packet.Error.Value); if (packet.Name != null) diff --git a/src/tool/Syroot.Worms.Worms2.GameServer/Syroot.Worms.Worms2.GameServer.csproj b/src/tool/Syroot.Worms.Worms2.GameServer/Syroot.Worms.Worms2.GameServer.csproj index b24a1b0..42296fc 100644 --- a/src/tool/Syroot.Worms.Worms2.GameServer/Syroot.Worms.Worms2.GameServer.csproj +++ b/src/tool/Syroot.Worms.Worms2.GameServer/Syroot.Worms.Worms2.GameServer.csproj @@ -8,7 +8,7 @@ Syroot (c) Syroot, licensed under MIT Worms 2 Game Server - 1.1.0 + 1.1.1