diff --git a/src/Serilog/Parsing/MessageTemplateParser.cs b/src/Serilog/Parsing/MessageTemplateParser.cs index 81481a0..b3d934e 100644 --- a/src/Serilog/Parsing/MessageTemplateParser.cs +++ b/src/Serilog/Parsing/MessageTemplateParser.cs @@ -150,6 +150,11 @@ public class MessageTemplateParser : IMessageTemplateParser if (!int.TryParse(alignment, NumberStyles.AllowLeadingSign, CultureInfo.InvariantCulture, out var width)) return new TextToken(rawText); + // int.MinValue has no positive counterpart, so it cannot be an alignment + // width; treat it as text rather than overflowing below. + if (width == int.MinValue) + return new TextToken(rawText); + var hasDash = alignment[0] == '-'; var direction = hasDash ? AlignmentDirection.Left : AlignmentDirection.Right; diff --git a/test/Serilog.Tests/Parsing/MessageTemplateParserTests.cs b/test/Serilog.Tests/Parsing/MessageTemplateParserTests.cs index f56fb60..ccf6b65 100644 --- a/test/Serilog.Tests/Parsing/MessageTemplateParserTests.cs +++ b/test/Serilog.Tests/Parsing/MessageTemplateParserTests.cs @@ -379,6 +379,13 @@ public class MessageTemplateParserTests new TextToken("{Hello,10-1}")); } + [Fact] + public void AlignmentOfIntMinValueIsParsedAsText() + { + AssertParsedAs("{Hello,-2147483648}", + new TextToken("{Hello,-2147483648}")); + } + [Fact] public void EmptyAlignmentIsParsedAsText() {