From 4b935d47128612618a551e6983c42f723cc9f490 Mon Sep 17 00:00:00 2001 From: "Pesterev Dmitrii (uib17117)" Date: Tue, 2 Jul 2024 13:14:49 +0200 Subject: [PATCH 1/2] set maximum message length to 32MB, to avoid high memory consumption (1.7GB) in case of currupted cache file --- CFX/CFXEnvelope.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CFX/CFXEnvelope.cs b/CFX/CFXEnvelope.cs index b69d8eae..cc691511 100644 --- a/CFX/CFXEnvelope.cs +++ b/CFX/CFXEnvelope.cs @@ -36,6 +36,8 @@ namespace CFX [JsonObject(MemberSerialization.OptIn, ItemTypeNameHandling = TypeNameHandling.Auto)] public class CFXEnvelope { + private const int maxLength = 32_000_000;//maximum message size ~32MB + public CFXEnvelope() { UniqueID = Guid.NewGuid(); @@ -239,6 +241,11 @@ internal static CFXEnvelope ReadRecord(BinaryReader reader) long filePosition = reader.BaseStream.Position; bool transmitted = reader.ReadBoolean(); Int32 len = reader.ReadInt32(); + if (len > maxLength) + { + reader.BaseStream.Seek(0, SeekOrigin.End); + throw new IOException("Input message is bigger than maximum allowed"); + } byte[] data = reader.ReadBytes(len); CFXEnvelope result = FromBytes(data); result.QueueFilePosition = filePosition; From 6a55f97ff2e1c8f71fc7ac91c699bcf0f2b14149 Mon Sep 17 00:00:00 2001 From: "Pesterev Dmitrii (uib17117)" Date: Tue, 2 Jul 2024 13:16:32 +0200 Subject: [PATCH 2/2] reuse serialized byte array at WriteRecord --- CFX/CFXEnvelope.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CFX/CFXEnvelope.cs b/CFX/CFXEnvelope.cs index cc691511..6e383021 100644 --- a/CFX/CFXEnvelope.cs +++ b/CFX/CFXEnvelope.cs @@ -266,7 +266,7 @@ internal void WriteRecord(BinaryWriter writer) writer.Write(Transmitted); byte[] data = this.ToBytes(); writer.Write((Int32)data.Length); - writer.Write(this.ToBytes()); + writer.Write(data); } internal void SetRecordTransmitted(BinaryWriter writer)