Skip to content

Commit

Permalink
Modified MimeParser.ParseHeaders() to accept header blocks that do no…
Browse files Browse the repository at this point in the history
…t end with a blank line

Fixes issue #250
  • Loading branch information
jstedfast committed Jun 6, 2016
1 parent 0dd2956 commit ff223fb
Showing 1 changed file with 14 additions and 7 deletions.
21 changes: 14 additions & 7 deletions MimeKit/MimeParser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,7 @@ public class MimeParser : IEnumerable<MimeMessage>

MimeParserState state;
MimeFormat format;
bool headersOnly;
bool persistent;
bool eos;

Expand Down Expand Up @@ -714,12 +715,13 @@ unsafe void StepHeaders (byte* inbuf)
// For more details, see https://github.com/jstedfast/MimeKit/pull/51
state = MimeParserState.Content;
} else {
// the last header we encountered was truncated - probably best
// to error out in this case
if (left > 0)
AppendRawHeaderData (inputIndex, left);

state = MimeParserState.Error;
// the last header we encountered was truncated - probably best to
// error out in this case *unless* we're parsing headers only...
if (!headersOnly)
state = MimeParserState.Error;
}

ParseAndAppendHeader ();
Expand Down Expand Up @@ -1353,10 +1355,15 @@ unsafe BoundaryType ConstructMultipart (Multipart multipart, byte* inbuf)

unsafe HeaderList ParseHeaders (byte* inbuf)
{
state = MimeParserState.Headers;
while (state < MimeParserState.Content) {
if (Step (inbuf) == MimeParserState.Error)
throw new FormatException ("Failed to parse headers.");
try {
headersOnly = true;
state = MimeParserState.Headers;
while (state < MimeParserState.Content) {
if (Step (inbuf) == MimeParserState.Error)
throw new FormatException ("Failed to parse headers.");
}
} finally {
headersOnly = false;
}

state = eos ? MimeParserState.Eos : MimeParserState.Complete;
Expand Down

0 comments on commit ff223fb

Please sign in to comment.