-
-
Notifications
You must be signed in to change notification settings - Fork 376
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added Experimental/MimeParser test for headers ending with a bare CR
- Loading branch information
Showing
2 changed files
with
192 additions
and
10 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -292,6 +292,86 @@ public async Task TestEmptyHeadersAsync () | |
} | ||
} | ||
|
||
[Test] | ||
public void TestHeadersEndWithBareCarriageReturn () | ||
{ | ||
var bytes = Encoding.ASCII.GetBytes ("From: <[email protected]>\r\nTo: <[email protected]>\r\nSubject: Test of headers ending with bare carriage-return\r\n\r"); | ||
|
||
using (var memory = new MemoryStream (bytes, false)) { | ||
var parser = new ExperimentalMimeParser (memory, MimeFormat.Entity); | ||
var headers = parser.ParseHeaders (); | ||
|
||
Assert.That (headers.Count, Is.EqualTo (3), "Unexpected header count."); | ||
Assert.That (headers[0].Id, Is.EqualTo (HeaderId.From)); | ||
Assert.That (headers[0].Value, Is.EqualTo ("<[email protected]>")); | ||
Assert.That (headers[1].Id, Is.EqualTo (HeaderId.To)); | ||
Assert.That (headers[1].Value, Is.EqualTo ("<[email protected]>")); | ||
Assert.That (headers[2].Id, Is.EqualTo (HeaderId.Subject)); | ||
Assert.That (headers[2].Value, Is.EqualTo ("Test of headers ending with bare carriage-return")); | ||
} | ||
} | ||
|
||
[Test] | ||
public async Task TestHeadersEndWithBareCarriageReturnAsync () | ||
{ | ||
var bytes = Encoding.ASCII.GetBytes ("From: <[email protected]>\r\nTo: <[email protected]>\r\nSubject: Test of headers ending with bare carriage-return\r\n\r"); | ||
|
||
using (var memory = new MemoryStream (bytes, false)) { | ||
var parser = new ExperimentalMimeParser (memory, MimeFormat.Entity); | ||
var headers = await parser.ParseHeadersAsync (); | ||
|
||
Assert.That (headers.Count, Is.EqualTo (3), "Unexpected header count."); | ||
Assert.That (headers[0].Id, Is.EqualTo (HeaderId.From)); | ||
Assert.That (headers[0].Value, Is.EqualTo ("<[email protected]>")); | ||
Assert.That (headers[1].Id, Is.EqualTo (HeaderId.To)); | ||
Assert.That (headers[1].Value, Is.EqualTo ("<[email protected]>")); | ||
Assert.That (headers[2].Id, Is.EqualTo (HeaderId.Subject)); | ||
Assert.That (headers[2].Value, Is.EqualTo ("Test of headers ending with bare carriage-return")); | ||
} | ||
} | ||
|
||
[Test] | ||
public void TestHeadersWithBareCarriageReturn () | ||
{ | ||
var bytes = Encoding.ASCII.GetBytes ("From: <[email protected]>\r\nTo: <[email protected]>\r\nSubject: Test of headers ending with bare carriage-return\r\n\rYou might expect this to be a body, but it's really an invalid header.\r\n"); | ||
|
||
using (var memory = new MemoryStream (bytes, false)) { | ||
var parser = new ExperimentalMimeParser (memory, MimeFormat.Entity); | ||
var headers = parser.ParseHeaders (); | ||
|
||
Assert.That (headers.Count, Is.EqualTo (4), "Unexpected header count."); | ||
Assert.That (headers[0].Id, Is.EqualTo (HeaderId.From)); | ||
Assert.That (headers[0].Value, Is.EqualTo ("<[email protected]>")); | ||
Assert.That (headers[1].Id, Is.EqualTo (HeaderId.To)); | ||
Assert.That (headers[1].Value, Is.EqualTo ("<[email protected]>")); | ||
Assert.That (headers[2].Id, Is.EqualTo (HeaderId.Subject)); | ||
Assert.That (headers[2].Value, Is.EqualTo ("Test of headers ending with bare carriage-return")); | ||
Assert.That (headers[3].IsInvalid, Is.True); | ||
Assert.That (headers[3].Field, Is.EqualTo ("\rYou might expect this to be a body, but it's really an invalid header.\r\n")); | ||
} | ||
} | ||
|
||
[Test] | ||
public async Task TestHeadersWithBareCarriageReturnAsync () | ||
{ | ||
var bytes = Encoding.ASCII.GetBytes ("From: <[email protected]>\r\nTo: <[email protected]>\r\nSubject: Test of headers ending with bare carriage-return\r\n\rYou might expect this to be a body, but it's really an invalid header.\r\n"); | ||
|
||
using (var memory = new MemoryStream (bytes, false)) { | ||
var parser = new ExperimentalMimeParser (memory, MimeFormat.Entity); | ||
var headers = await parser.ParseHeadersAsync (); | ||
|
||
Assert.That (headers.Count, Is.EqualTo (4), "Unexpected header count."); | ||
Assert.That (headers[0].Id, Is.EqualTo (HeaderId.From)); | ||
Assert.That (headers[0].Value, Is.EqualTo ("<[email protected]>")); | ||
Assert.That (headers[1].Id, Is.EqualTo (HeaderId.To)); | ||
Assert.That (headers[1].Value, Is.EqualTo ("<[email protected]>")); | ||
Assert.That (headers[2].Id, Is.EqualTo (HeaderId.Subject)); | ||
Assert.That (headers[2].Value, Is.EqualTo ("Test of headers ending with bare carriage-return")); | ||
Assert.That (headers[3].IsInvalid, Is.True); | ||
Assert.That (headers[3].Field, Is.EqualTo ("\rYou might expect this to be a body, but it's really an invalid header.\r\n")); | ||
} | ||
} | ||
|
||
[Test] | ||
public void TestPartialByteOrderMarkEOF () | ||
{ | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -80,8 +80,10 @@ public void TestHeaderParser () | |
var bytes = Encoding.ASCII.GetBytes ("Header-1: value 1\r\nHeader-2: value 2\r\nHeader-3: value 3\r\n\r\n"); | ||
|
||
using (var memory = new MemoryStream (bytes, false)) { | ||
var parser = new MimeParser (memory, MimeFormat.Entity); | ||
|
||
try { | ||
var headers = HeaderList.Load (memory); | ||
var headers = parser.ParseHeaders (); | ||
string value; | ||
|
||
Assert.That (headers.Count, Is.EqualTo (3), "Unexpected header count."); | ||
|
@@ -109,8 +111,10 @@ public async Task TestHeaderParserAsync () | |
var bytes = Encoding.ASCII.GetBytes ("Header-1: value 1\r\nHeader-2: value 2\r\nHeader-3: value 3\r\n\r\n"); | ||
|
||
using (var memory = new MemoryStream (bytes, false)) { | ||
var parser = new MimeParser (memory, MimeFormat.Entity); | ||
|
||
try { | ||
var headers = await HeaderList.LoadAsync (memory); | ||
var headers = await parser.ParseHeadersAsync (); | ||
string value; | ||
|
||
Assert.That (headers.Count, Is.EqualTo (3), "Unexpected header count."); | ||
|
@@ -138,8 +142,10 @@ public void TestTruncatedHeaderName () | |
var bytes = Encoding.ASCII.GetBytes ("Header-1"); | ||
|
||
using (var memory = new MemoryStream (bytes, false)) { | ||
var parser = new MimeParser (memory, MimeFormat.Entity); | ||
|
||
try { | ||
var headers = HeaderList.Load (memory); | ||
var headers = parser.ParseHeaders (); | ||
Assert.Fail ("Parsing headers should fail."); | ||
} catch (FormatException) { | ||
} catch (Exception ex) { | ||
|
@@ -154,8 +160,10 @@ public async Task TestTruncatedHeaderNameAsync () | |
var bytes = Encoding.ASCII.GetBytes ("Header-1"); | ||
|
||
using (var memory = new MemoryStream (bytes, false)) { | ||
var parser = new MimeParser (memory, MimeFormat.Entity); | ||
|
||
try { | ||
var headers = await HeaderList.LoadAsync (memory); | ||
var headers = await parser.ParseHeadersAsync (); | ||
Assert.Fail ("Parsing headers should fail."); | ||
} catch (FormatException) { | ||
} catch (Exception ex) { | ||
|
@@ -170,8 +178,10 @@ public void TestTruncatedHeader () | |
var bytes = Encoding.ASCII.GetBytes ("Header-1: value 1"); | ||
|
||
using (var memory = new MemoryStream (bytes, false)) { | ||
var parser = new MimeParser (memory, MimeFormat.Entity); | ||
|
||
try { | ||
var headers = HeaderList.Load (memory); | ||
var headers = parser.ParseHeaders (); | ||
|
||
Assert.That (headers.Count, Is.EqualTo (1), "Unexpected header count."); | ||
|
||
|
@@ -190,8 +200,10 @@ public async Task TestTruncatedHeaderAsync () | |
var bytes = Encoding.ASCII.GetBytes ("Header-1: value 1"); | ||
|
||
using (var memory = new MemoryStream (bytes, false)) { | ||
var parser = new MimeParser (memory, MimeFormat.Entity); | ||
|
||
try { | ||
var headers = await HeaderList.LoadAsync (memory); | ||
var headers = await parser.ParseHeadersAsync (); | ||
|
||
Assert.That (headers.Count, Is.EqualTo (1), "Unexpected header count."); | ||
|
||
|
@@ -210,8 +222,10 @@ public void TestSingleHeaderNoTerminator () | |
var bytes = Encoding.ASCII.GetBytes ("Header-1: value 1\r\n"); | ||
|
||
using (var memory = new MemoryStream (bytes, false)) { | ||
var parser = new MimeParser (memory, MimeFormat.Entity); | ||
|
||
try { | ||
var headers = HeaderList.Load (memory); | ||
var headers = parser.ParseHeaders (); | ||
|
||
Assert.That (headers.Count, Is.EqualTo (1), "Unexpected header count."); | ||
|
||
|
@@ -230,8 +244,10 @@ public async Task TestSingleHeaderNoTerminatorAsync () | |
var bytes = Encoding.ASCII.GetBytes ("Header-1: value 1\r\n"); | ||
|
||
using (var memory = new MemoryStream (bytes, false)) { | ||
var parser = new MimeParser (memory, MimeFormat.Entity); | ||
|
||
try { | ||
var headers = await HeaderList.LoadAsync (memory); | ||
var headers = await parser.ParseHeadersAsync (); | ||
|
||
Assert.That (headers.Count, Is.EqualTo (1), "Unexpected header count."); | ||
|
||
|
@@ -250,8 +266,10 @@ public void TestEmptyHeaders () | |
var bytes = Encoding.ASCII.GetBytes ("\r\n"); | ||
|
||
using (var memory = new MemoryStream (bytes, false)) { | ||
var parser = new MimeParser (memory, MimeFormat.Entity); | ||
|
||
try { | ||
var headers = HeaderList.Load (memory); | ||
var headers = parser.ParseHeaders (); | ||
|
||
Assert.That (headers.Count, Is.EqualTo (0), "Unexpected header count."); | ||
} catch (Exception ex) { | ||
|
@@ -266,8 +284,10 @@ public async Task TestEmptyHeadersAsync () | |
var bytes = Encoding.ASCII.GetBytes ("\r\n"); | ||
|
||
using (var memory = new MemoryStream (bytes, false)) { | ||
var parser = new MimeParser (memory, MimeFormat.Entity); | ||
|
||
try { | ||
var headers = await HeaderList.LoadAsync (memory); | ||
var headers = await parser.ParseHeadersAsync (); | ||
|
||
Assert.That (headers.Count, Is.EqualTo (0), "Unexpected header count."); | ||
} catch (Exception ex) { | ||
|
@@ -276,6 +296,88 @@ public async Task TestEmptyHeadersAsync () | |
} | ||
} | ||
|
||
[Test] | ||
[Ignore ("This should be handled the same as ExperimentalMimeParser")] | ||
public void TestHeadersEndWithBareCarriageReturn () | ||
{ | ||
var bytes = Encoding.ASCII.GetBytes ("From: <[email protected]>\r\nTo: <[email protected]>\r\nSubject: Test of headers ending with bare carriage-return\r\n\r"); | ||
|
||
using (var memory = new MemoryStream (bytes, false)) { | ||
var parser = new MimeParser (memory, MimeFormat.Entity); | ||
var headers = parser.ParseHeaders (); | ||
|
||
Assert.That (headers.Count, Is.EqualTo (3), "Unexpected header count."); | ||
Assert.That (headers[0].Id, Is.EqualTo (HeaderId.From)); | ||
Assert.That (headers[0].Value, Is.EqualTo ("<[email protected]>")); | ||
Assert.That (headers[1].Id, Is.EqualTo (HeaderId.To)); | ||
Assert.That (headers[1].Value, Is.EqualTo ("<[email protected]>")); | ||
Assert.That (headers[2].Id, Is.EqualTo (HeaderId.Subject)); | ||
Assert.That (headers[2].Value, Is.EqualTo ("Test of headers ending with bare carriage-return")); | ||
} | ||
} | ||
|
||
[Test] | ||
[Ignore ("This should be handled the same as ExperimentalMimeParser")] | ||
public async Task TestHeadersEndWithBareCarriageReturnAsync () | ||
{ | ||
var bytes = Encoding.ASCII.GetBytes ("From: <[email protected]>\r\nTo: <[email protected]>\r\nSubject: Test of headers ending with bare carriage-return\r\n\r"); | ||
|
||
using (var memory = new MemoryStream (bytes, false)) { | ||
var parser = new MimeParser (memory, MimeFormat.Entity); | ||
var headers = await parser.ParseHeadersAsync (); | ||
|
||
Assert.That (headers.Count, Is.EqualTo (3), "Unexpected header count."); | ||
Assert.That (headers[0].Id, Is.EqualTo (HeaderId.From)); | ||
Assert.That (headers[0].Value, Is.EqualTo ("<[email protected]>")); | ||
Assert.That (headers[1].Id, Is.EqualTo (HeaderId.To)); | ||
Assert.That (headers[1].Value, Is.EqualTo ("<[email protected]>")); | ||
Assert.That (headers[2].Id, Is.EqualTo (HeaderId.Subject)); | ||
Assert.That (headers[2].Value, Is.EqualTo ("Test of headers ending with bare carriage-return")); | ||
} | ||
} | ||
|
||
[Test] | ||
public void TestHeadersWithBareCarriageReturn () | ||
{ | ||
var bytes = Encoding.ASCII.GetBytes ("From: <[email protected]>\r\nTo: <[email protected]>\r\nSubject: Test of headers ending with bare carriage-return\r\n\rYou might expect this to be a body, but it's really an invalid header.\r\n"); | ||
|
||
using (var memory = new MemoryStream (bytes, false)) { | ||
var parser = new MimeParser (memory, MimeFormat.Entity); | ||
var headers = parser.ParseHeaders (); | ||
|
||
Assert.That (headers.Count, Is.EqualTo (4), "Unexpected header count."); | ||
Assert.That (headers[0].Id, Is.EqualTo (HeaderId.From)); | ||
Assert.That (headers[0].Value, Is.EqualTo ("<[email protected]>")); | ||
Assert.That (headers[1].Id, Is.EqualTo (HeaderId.To)); | ||
Assert.That (headers[1].Value, Is.EqualTo ("<[email protected]>")); | ||
Assert.That (headers[2].Id, Is.EqualTo (HeaderId.Subject)); | ||
Assert.That (headers[2].Value, Is.EqualTo ("Test of headers ending with bare carriage-return")); | ||
Assert.That (headers[3].IsInvalid, Is.True); | ||
Assert.That (headers[3].Field, Is.EqualTo ("\rYou might expect this to be a body, but it's really an invalid header.\r\n")); | ||
} | ||
} | ||
|
||
[Test] | ||
public async Task TestHeadersWithBareCarriageReturnAsync () | ||
{ | ||
var bytes = Encoding.ASCII.GetBytes ("From: <[email protected]>\r\nTo: <[email protected]>\r\nSubject: Test of headers ending with bare carriage-return\r\n\rYou might expect this to be a body, but it's really an invalid header.\r\n"); | ||
|
||
using (var memory = new MemoryStream (bytes, false)) { | ||
var parser = new MimeParser (memory, MimeFormat.Entity); | ||
var headers = await parser.ParseHeadersAsync (); | ||
|
||
Assert.That (headers.Count, Is.EqualTo (4), "Unexpected header count."); | ||
Assert.That (headers[0].Id, Is.EqualTo (HeaderId.From)); | ||
Assert.That (headers[0].Value, Is.EqualTo ("<[email protected]>")); | ||
Assert.That (headers[1].Id, Is.EqualTo (HeaderId.To)); | ||
Assert.That (headers[1].Value, Is.EqualTo ("<[email protected]>")); | ||
Assert.That (headers[2].Id, Is.EqualTo (HeaderId.Subject)); | ||
Assert.That (headers[2].Value, Is.EqualTo ("Test of headers ending with bare carriage-return")); | ||
Assert.That (headers[3].IsInvalid, Is.True); | ||
Assert.That (headers[3].Field, Is.EqualTo ("\rYou might expect this to be a body, but it's really an invalid header.\r\n")); | ||
} | ||
} | ||
|
||
[Test] | ||
public void TestPartialByteOrderMarkEOF () | ||
{ | ||
|