jstedfast/MailKit · error · ArgumentNullException
value
Error message
value
What it means
Guard in the NtlmChallengeMessage.ServerChallenge property setter: the challenge (nonce) value was null. The NTLM challenge message requires an 8-byte server challenge, so null is rejected with ArgumentNullException (a wrong-length value raises ArgumentException instead).
Solutions
- Pass a non-null byte array (exactly 8 bytes) to ServerChallenge.
- Construct/parse the NtlmChallengeMessage from the actual server Type2 response instead of assigning raw fields.
- Null-check the parsed challenge bytes before assigning.
Example fix
// before challenge.ServerChallenge = parsedChallenge; // parsedChallenge is null // after if (parsedChallenge != null && parsedChallenge.Length == 8) challenge.ServerChallenge = parsedChallenge;
Defensive patterns
Strategy: validation
Validate before calling
if (serverChallenge == null) throw new ArgumentException("ServerChallenge must not be null.");
if (serverChallenge.Length != 8) throw new ArgumentException("ServerChallenge must be exactly 8 bytes.");
challenge.ServerChallenge = serverChallenge; Type guard
static bool IsValidChallenge(byte[]? value) => value != null && value.Length == 8;
Try / catch
try {
challenge.ServerChallenge = value;
} catch (ArgumentNullException) {
// fall back to parsing the raw Type2 response instead of manual assignment
challenge = new NtlmChallengeMessage(rawResponse, 0);
} Prevention
- Prefer constructing NtlmChallengeMessage from the raw server response over manual property assignment.
- Null-check parsed fields before assigning them.
- Don't overwrite ServerChallenge in normal flows; it is set during parsing.
When it happens
Trigger: Assigning ServerChallenge = null directly, or setting it from a parsed field that was absent from the Type2 message.
Common situations: Challenge extracted from a malformed/short server response yielding null; test code resetting the property.
Related errors
AI-assisted analysis of jstedfast/MailKit@9d3859a785 (2026-09-15).
Data as JSON: /api/errors/72da4591b21db4ea.
Report an issue: GitHub.
Appendix: source
Thrown at MailKit/Security/Ntlm/NtlmChallengeMessage.cs:69
{
serverChallenge = new byte[8];
Decode (message, startIndex, length);
cached = new byte[length];
Buffer.BlockCopy (message, startIndex, cached, 0, length);
}
~NtlmChallengeMessage ()
{
if (serverChallenge != null)
Array.Clear (serverChallenge, 0, serverChallenge.Length);
}
public byte[] ServerChallenge {
get { return serverChallenge; }
set {
if (value == null)
throw new ArgumentNullException (nameof (value));
if (value.Length != 8)
throw new ArgumentException ("Invalid nonce length (should be 8 bytes).", nameof (value));
Array.Clear (serverChallenge, 0, serverChallenge.Length);
serverChallenge = value;
}
}
public string? TargetName {
get; set;
}
public NtlmTargetInfo? TargetInfo {
get; set;
}
public byte[]? GetEncodedTargetInfo ()View on GitHub (pinned to 9d3859a785)