summaryrefslogtreecommitdiffstats
path: root/src/lib.rs
diff options
context:
space:
mode:
authorKartikaya Gupta <kats@seldon.staktrace.com>2016-12-04 02:46:33 -0500
committerKartikaya Gupta <kats@seldon.staktrace.com>2016-12-04 02:46:33 -0500
commit9f8013c21fca547fdb6058080ced55e7adc10d38 (patch)
tree30bd6e0b07c4ff247c04900f7365fa893f1405b7 /src/lib.rs
parentb5a5880223f175bfdee17671f028b4bc1a387d95 (diff)
Fix for issue #7 - deal with lack of headers
Diffstat (limited to 'src/lib.rs')
-rw-r--r--src/lib.rs31
1 files changed, 25 insertions, 6 deletions
diff --git a/src/lib.rs b/src/lib.rs
index 46d0530..6ba0ce3 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -256,6 +256,7 @@ impl<'a> MailHeader<'a> {
}
}
+#[derive(Debug)]
enum HeaderParseState {
Initial,
Key,
@@ -446,12 +447,7 @@ pub fn parse_headers(raw_data: &[u8]) -> Result<(Vec<MailHeader>, usize), MailPa
let mut headers: Vec<MailHeader> = Vec::new();
let mut ix = 0;
loop {
- let (header, ix_next) = try!(parse_header(&raw_data[ix..]));
- headers.push(header);
- ix = ix + ix_next;
- if ix >= raw_data.len() {
- break;
- } else if raw_data[ix] == b'\n' {
+ if raw_data[ix] == b'\n' {
ix = ix + 1;
break;
} else if raw_data[ix] == b'\r' {
@@ -463,6 +459,12 @@ pub fn parse_headers(raw_data: &[u8]) -> Result<(Vec<MailHeader>, usize), MailPa
CR character!"));
}
}
+ let (header, ix_next) = try!(parse_header(&raw_data[ix..]));
+ headers.push(header);
+ ix = ix + ix_next;
+ if ix >= raw_data.len() {
+ break;
+ }
}
Ok((headers, ix))
}
@@ -957,4 +959,21 @@ mod tests {
assert_eq!(parsed.headers[0].get_key().unwrap(), "Content-Type");
assert_eq!(parsed.get_body().unwrap(), "");
}
+
+ #[test]
+ fn test_no_headers_in_subpart() {
+ let mail = parse_mail(concat!(
+ "Content-Type: multipart/report; report-type=delivery-status;\n",
+ "\tboundary=\"1404630116.22555.postech.q0.x.x.x\"\n",
+ "\n",
+ "--1404630116.22555.postech.q0.x.x.x\n",
+ "\n",
+ "--1404630116.22555.postech.q0.x.x.x--\n")
+ .as_bytes())
+ .unwrap();
+ assert_eq!(mail.ctype.mimetype, "multipart/report");
+ assert_eq!(mail.subparts[0].headers.len(), 0);
+ assert_eq!(mail.subparts[0].ctype.mimetype, "text/plain");
+ assert_eq!(mail.subparts[0].get_body().unwrap(), "");
+ }
}