From 5b8df6535a272e5625dc270a0a007f414de9eaea Mon Sep 17 00:00:00 2001 From: DualFroz Date: Wed, 2 Sep 2026 09:42:20 +0200 Subject: [PATCH] fix: avoid OverflowException when alignment width is int.MinValue Parsing a message template whose alignment is "-2147483648" (int.MinValue) threw System.OverflowException from Math.Abs, violating the documented contract that syntactically invalid templates yield text tokens rather than throwing. Treat that alignment as text, matching how other alignment values that cannot form a valid width are already handled. --- src/Serilog/Parsing/MessageTemplateParser.cs | 5 +++++ test/Serilog.Tests/Parsing/MessageTemplateParserTests.cs | 7 +++++++ 2 files changed, 12 insertions(+) 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() {