Skip to content

Commit cf34f4d

Browse files
committed
Optimize spf try parse logic
1 parent 142d068 commit cf34f4d

File tree

3 files changed

+18
-12
lines changed

3 files changed

+18
-12
lines changed

src/Nager.EmailAuthentication/FragmentParsers/DmarcRecordDataFragmentParserV1.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,29 +13,29 @@ public static class DmarcRecordDataFragmentParserV1
1313
/// <summary>
1414
/// Attempts to parse a raw DMARC string into a <see cref="DmarcRecordDataFragmentV1"/> object.
1515
/// </summary>
16-
/// <param name="dmarcRaw">The raw DMARC string to parse.</param>
16+
/// <param name="dmarcString">The raw DMARC string to parse.</param>
1717
/// <param name="dmarcDataFragment">The parsed DMARC record, if successful.</param>
1818
/// <returns><see langword="true"/> if parsing is successful; otherwise <see langword="false"/>.</returns>
1919
public static bool TryParse(
20-
string? dmarcRaw,
20+
string? dmarcString,
2121
[NotNullWhen(true)] out DmarcRecordDataFragmentV1? dmarcDataFragment)
2222
{
23-
return TryParse(dmarcRaw, out dmarcDataFragment, out _);
23+
return TryParse(dmarcString, out dmarcDataFragment, out _);
2424
}
2525

2626
/// <summary>
2727
/// Attempts to parse a raw DMARC string into a <see cref="DmarcRecordDataFragmentV1"/> object.
2828
/// </summary>
29-
/// <param name="dmarcRaw">The raw DMARC string to parse.</param>
29+
/// <param name="dmarcString">The raw DMARC string to parse.</param>
3030
/// <param name="dmarcDataFragment">The parsed DMARC record, if successful.</param>
3131
/// <param name="parsingResults">A list of errors in the DMARC string, if any.</param>
3232
/// <returns><see langword="true"/> if parsing is successful; otherwise <see langword="false"/>.</returns>
3333
public static bool TryParse(
34-
string? dmarcRaw,
34+
string? dmarcString,
3535
[NotNullWhen(true)] out DmarcRecordDataFragmentV1? dmarcDataFragment,
3636
out ParsingResult[]? parsingResults)
3737
{
38-
if (string.IsNullOrWhiteSpace(dmarcRaw))
38+
if (string.IsNullOrWhiteSpace(dmarcString))
3939
{
4040
parsingResults = null;
4141
dmarcDataFragment = null;
@@ -125,7 +125,7 @@ public static bool TryParse(
125125
};
126126

127127
var parserBase = new KeyValueParserBase<DmarcRecordDataFragmentV1>(handlers);
128-
return parserBase.TryParse(dmarcRaw, out dmarcDataFragment, out parsingResults);
128+
return parserBase.TryParse(dmarcString, out dmarcDataFragment, out parsingResults);
129129
}
130130

131131
private static ParsingResult[] ValidateVersion(ValidateRequest validateRequest)

src/Nager.EmailAuthentication/FragmentParsers/SpfRecordDataFragmentParserV1.cs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,22 @@ public static class SpfRecordDataFragmentParserV1
1313
/// <summary>
1414
/// Try Parse
1515
/// </summary>
16-
/// <param name="spf"></param>
16+
/// <param name="spfString"></param>
1717
/// <param name="spfDataFragment"></param>
1818
/// <returns></returns>
1919
public static bool TryParse(
20-
string spf,
20+
string? spfString,
2121
[NotNullWhen(true)] out SpfRecordDataFragmentV1? spfDataFragment)
2222
{
2323
var spfPrefix = "v=spf1 ";
2424

25-
if (!spf.StartsWith(spfPrefix, StringComparison.OrdinalIgnoreCase))
25+
if (string.IsNullOrWhiteSpace(spfString))
26+
{
27+
spfDataFragment = null;
28+
return false;
29+
}
30+
31+
if (!spfString.StartsWith(spfPrefix, StringComparison.OrdinalIgnoreCase))
2632
{
2733
spfDataFragment = null;
2834
return false;
@@ -49,7 +55,7 @@ public static bool TryParse(
4955

5056
var spfTermDelimiter = ' ';
5157
var allowedQualifiers = new char[] { '+', '?', '~', '-' };
52-
var inputSpan = spf.AsSpan()[spfPrefix.Length..];
58+
var inputSpan = spfString.AsSpan()[spfPrefix.Length..];
5359
var nextIndexOfDelimiter = 0;
5460
var termIndex = 0;
5561

src/Nager.EmailAuthentication/Nager.EmailAuthentication.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
<TargetFrameworks>net8.0;net9.0</TargetFrameworks>
2222

23-
<Version>3.0.0</Version>
23+
<Version>3.0.1</Version>
2424
</PropertyGroup>
2525

2626
<ItemGroup>

0 commit comments

Comments
 (0)