From c252ac293473229197c549f86612173185b27471 Mon Sep 17 00:00:00 2001 From: zeromus Date: Sun, 21 Mar 2021 21:28:24 -0400 Subject: [PATCH] blind fix to lua socket receive string which supports embedded nulls and probably fixes rarer cases where long codepoints got broken up. re #2671 --- src/BizHawk.Client.Common/Api/SocketServer.cs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/BizHawk.Client.Common/Api/SocketServer.cs b/src/BizHawk.Client.Common/Api/SocketServer.cs index dc4db0f868..accd2cb054 100644 --- a/src/BizHawk.Client.Common/Api/SocketServer.cs +++ b/src/BizHawk.Client.Common/Api/SocketServer.cs @@ -79,23 +79,25 @@ namespace BizHawk.Client.Common Connect(); } - var encoding1 = encoding ?? Encoding.UTF8; - var resp = ""; var receivedBytes = new byte[256]; - var receivedLength = 1; - while (receivedLength > 0) + System.IO.MemoryStream ms = new System.IO.MemoryStream(); + for(; ;) { try { - receivedLength = _soc.Receive(receivedBytes, receivedBytes.Length, 0); - resp += encoding1.GetString(receivedBytes); + int receivedLength = _soc.Receive(receivedBytes, receivedBytes.Length, 0); + if (receivedLength == 0) + break; + ms.Write(receivedBytes, 0, receivedLength); } catch { - receivedLength = 0; + ms.SetLength(0); + break; } } - return resp; + var myencoding = encoding ?? Encoding.UTF8; + return myencoding.GetString(ms.ToArray(), 0, (int)ms.Length); } public int SendBytes(byte[] sendBytes)