From 3065e8df48e340e960199bfc557618233dd352f5 Mon Sep 17 00:00:00 2001 From: miniduikboot Date: Wed, 21 Jul 2021 21:53:22 +0200 Subject: [PATCH] Check client version when parsing C2S handshake 2021.6.30 added new fields, which aren't present on old clients. This commit makes sure players on old versions are disconnected properly instead of the server erroring internally. --- .../Net/Messages/C2S/HandshakeC2S.cs | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/Impostor.Api/Net/Messages/C2S/HandshakeC2S.cs b/src/Impostor.Api/Net/Messages/C2S/HandshakeC2S.cs index 8b93792..62ad375 100644 --- a/src/Impostor.Api/Net/Messages/C2S/HandshakeC2S.cs +++ b/src/Impostor.Api/Net/Messages/C2S/HandshakeC2S.cs @@ -9,8 +9,20 @@ namespace Impostor.Api.Net.Messages.C2S clientVersion = reader.ReadInt32(); name = reader.ReadString(); lastNonceReceived = reader.ReadUInt32(); - language = (Language)reader.ReadUInt32(); - chatMode = (QuickChatModes)reader.ReadByte(); + + // Version 2021.6.30 (aka 50537300) is the first version that includes language and chat modes + // In case the game is older than that, stop reading here. + if (clientVersion >= 50537300) + { + language = (Language)reader.ReadUInt32(); + chatMode = (QuickChatModes)reader.ReadByte(); + } + else + { + // This is an old version of Among Us and will fail later in the handshake due to a version mismatch + language = Language.English; + chatMode = QuickChatModes.FreeChatOrQuickChat; + } } } } -- 2.39.5