diff --git a/src/libraries/System.Net.Mail/src/System/Net/Mime/MimeBasePart.cs b/src/libraries/System.Net.Mail/src/System/Net/Mime/MimeBasePart.cs index e0776147cb11c4..35a642ee56667e 100644 --- a/src/libraries/System.Net.Mail/src/System/Net/Mime/MimeBasePart.cs +++ b/src/libraries/System.Net.Mail/src/System/Net/Mime/MimeBasePart.cs @@ -10,7 +10,6 @@ namespace System.Net.Mime internal class MimeBasePart { internal const string DefaultCharSet = "utf-8"; - private static readonly char[] s_decodeEncodingSplitChars = new char[] { '?', '\r', '\n' }; protected ContentType? _contentType; protected ContentDisposition? _contentDisposition; @@ -96,14 +95,16 @@ internal static string DecodeHeaderValue(string? value) return null; } - string[] subStrings = value.Split(s_decodeEncodingSplitChars); - if ((subStrings.Length < 5 || subStrings[0] != "=" || subStrings[4] != "=")) + ReadOnlySpan valueSpan = value; + Span subStrings = stackalloc Range[6]; + if (valueSpan.SplitAny(subStrings, "?\r\n") < 5 || + valueSpan[subStrings[0]] is not "=" || + valueSpan[subStrings[4]] is not "=") { return null; } - string charSet = subStrings[1]; - return Encoding.GetEncoding(charSet); + return Encoding.GetEncoding(value[subStrings[1]]); } internal static bool IsAscii(string value, bool permitCROrLF)