From bc7fb7c43dbe8dcbead49537573f989a9e9e7a78 Mon Sep 17 00:00:00 2001 From: Vitalii Mikhailov Date: Wed, 2 Oct 2024 10:07:35 +0300 Subject: [PATCH] * Fixed a possible crash related to trace logging * Updated crash reports path anonymization --- build/common.props | 4 +- changelog.txt | 5 ++ .../Logger/LoggerTraceListener.cs | 67 +++++++++++-------- 3 files changed, 47 insertions(+), 29 deletions(-) diff --git a/build/common.props b/build/common.props index 51dccf08..30182339 100644 --- a/build/common.props +++ b/build/common.props @@ -5,7 +5,7 @@ 1.0.0 - 2.9.13 + 2.9.14 2.2.2 3.2.0.77 @@ -18,7 +18,7 @@ 1.1.0.104 3.0.0.142 5.0.226 - 14.0.0.88 + 14.0.0.91 diff --git a/changelog.txt b/changelog.txt index 1b1e006c..0a3dfb03 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,9 @@ --------------------------------------------------------------------------------------------------- +Version: 2.9.14 +Game Versions: v1.0.x,v1.1.x,v1.2.x +* Fixed a possible crash related to trace logging +* Updated crash reports path anonymization +--------------------------------------------------------------------------------------------------- Version: 2.9.13 Game Versions: v1.0.x,v1.1.x,v1.2.x * Better Wine detection diff --git a/src/Bannerlord.ButterLib/Logger/LoggerTraceListener.cs b/src/Bannerlord.ButterLib/Logger/LoggerTraceListener.cs index 47d96c15..18e76cb3 100644 --- a/src/Bannerlord.ButterLib/Logger/LoggerTraceListener.cs +++ b/src/Bannerlord.ButterLib/Logger/LoggerTraceListener.cs @@ -17,34 +17,47 @@ private record ParseResult // BLSE fixes that, but we might revert to string handling before BLSE is mandatory private static ParseResult? Parse(ReadOnlySpan str) { - if (str.IndexOf(':') is var logLevelIdx && logLevelIdx == -1) - return null; - - var sourceLogLevel = str.Slice(0, logLevelIdx); - var eventIdMessage = str.Slice(logLevelIdx + 1); - - if (sourceLogLevel.LastIndexOf(' ') is var sourceIdx && sourceIdx == -1) - return null; - var process = sourceLogLevel.Slice(0, sourceIdx); - var logLevelStr = sourceLogLevel.Slice(sourceIdx + 1); - - if (!Enum.TryParse(logLevelStr.ToString(), out var logLevel)) - return null; - - var eventIdIdx = eventIdMessage.IndexOf(':'); - if (eventIdIdx == -1) - return null; - if (!int.TryParse(eventIdMessage.Slice(0, eventIdIdx).ToString(), out var eventId)) - return null; - var message = eventIdMessage.Slice(eventIdIdx + 2); - - return new ParseResult + try + { + if (str.IndexOf(':') is var logLevelIdx && logLevelIdx == -1) + return null; + + var sourceLogLevel = str.Slice(0, logLevelIdx); + var eventIdMessage = str.Slice(logLevelIdx + 1); + + if (sourceLogLevel.LastIndexOf(' ') is var sourceIdx && sourceIdx == -1) + return null; + var process = sourceLogLevel.Slice(0, sourceIdx); + var logLevelStr = sourceLogLevel.Slice(sourceIdx + 1); + + if (!Enum.TryParse(logLevelStr.ToString(), out var logLevel)) + return null; + + var eventIdIdx = eventIdMessage.IndexOf(':'); + if (eventIdIdx == -1) + return null; + if (!int.TryParse(eventIdMessage.Slice(0, eventIdIdx).ToString(), out var eventId)) + return null; + var message = eventIdMessage.Slice(eventIdIdx + 2); + + return new ParseResult + { + Process = process.ToString(), + Level = logLevel, + EventId = eventId, + Message = message.ToString() + }; + } + catch (Exception e) { - Process = process.ToString(), - Level = logLevel, - EventId = eventId, - Message = message.ToString() - }; + return new ParseResult + { + Process = "UNKNOWN", + Level = TraceEventType.Error, + EventId = 0, + Message = $"Failed to parse log message: {str.ToString()}! Please report this issue to the ButterLib developers! Exception: {e}" + }; + } }