From 52a2ccf31a36cc685a9ee475faeac487572a42e1 Mon Sep 17 00:00:00 2001 From: meli <57847713+ff-meli@users.noreply.github.com> Date: Sun, 26 Apr 2020 14:38:28 -0700 Subject: [PATCH] fix payload parsing to not use PeekChar() when it actually wants a byte (breaks in some non-ascii cases) --- Dalamud/Game/Chat/SeStringHandling/Payload.cs | 5 ++++- .../Game/Chat/SeStringHandling/Payloads/TextPayload.cs | 10 +++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/Dalamud/Game/Chat/SeStringHandling/Payload.cs b/Dalamud/Game/Chat/SeStringHandling/Payload.cs index 716ad0eed..7b31a4565 100644 --- a/Dalamud/Game/Chat/SeStringHandling/Payload.cs +++ b/Dalamud/Game/Chat/SeStringHandling/Payload.cs @@ -30,7 +30,10 @@ namespace Dalamud.Game.Chat.SeStringHandling public static Payload Process(BinaryReader reader) { Payload payload = null; - if ((byte)reader.PeekChar() != START_BYTE) + + var initialByte = reader.ReadByte(); + reader.BaseStream.Position--; + if (initialByte != START_BYTE) { payload = ProcessText(reader); } diff --git a/Dalamud/Game/Chat/SeStringHandling/Payloads/TextPayload.cs b/Dalamud/Game/Chat/SeStringHandling/Payloads/TextPayload.cs index 161cd82db..bd6703835 100644 --- a/Dalamud/Game/Chat/SeStringHandling/Payloads/TextPayload.cs +++ b/Dalamud/Game/Chat/SeStringHandling/Payloads/TextPayload.cs @@ -58,11 +58,15 @@ namespace Dalamud.Game.Chat.SeStringHandling.Payloads while (reader.BaseStream.Position < endOfStream) { - if ((byte)reader.PeekChar() == START_BYTE) + var nextByte = reader.ReadByte(); + if (nextByte == START_BYTE) + { + // rewind since this byte isn't part of this payload + reader.BaseStream.Position--; break; + } - // not the most efficient, but the easiest - text.Add(reader.ReadByte()); + text.Add(nextByte); } if (text.Count > 0)