From 81138ecd74f331cf0e6f08ebd962b6b68b9413e4 Mon Sep 17 00:00:00 2001 From: Dmitriy Polomoshnov <92720808+diopolgg@users.noreply.github.com> Date: Sat, 9 Mar 2024 12:44:05 +0300 Subject: [PATCH] fix possible infinite loop while parsing for broken replays (#52) --- src/Unreal.Core/ReplayReader.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/Unreal.Core/ReplayReader.cs b/src/Unreal.Core/ReplayReader.cs index 82bff91..d933a7f 100644 --- a/src/Unreal.Core/ReplayReader.cs +++ b/src/Unreal.Core/ReplayReader.cs @@ -317,6 +317,13 @@ public virtual void ReadReplayChunks(FArchive archive) var chunkSize = archive.ReadInt32(); var offset = archive.Position; + if (chunkSize <= 0 || (long) chunkSize + offset > int.MaxValue) + { + _logger?.LogError("Invalid chunk size ({chunkSize} for chunk {chunkType}) at offset {offset}. Stopping the parsing...", chunkSize, chunkType, archive.Position); + archive.SetError(); + return; + } + if (chunkType == ReplayChunkType.ReplayData && _parseMode > ParseMode.EventsOnly) { ReadReplayData(archive, chunkSize);