From 3dfb2f4f2cd49f3b540dd38c86afa2d211d2fa4d Mon Sep 17 00:00:00 2001 From: Manos Pitsidianakis Date: Thu, 28 Nov 2019 18:52:12 +0200 Subject: [PATCH] melib: fix out-of-bounds parser bug --- melib/src/email/compose.rs | 3 ++- melib/src/email/parser.rs | 7 ++++++- testing/src/email_parse.rs | 4 ++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/melib/src/email/compose.rs b/melib/src/email/compose.rs index d2d7dde2..ef09e3bb 100644 --- a/melib/src/email/compose.rs +++ b/melib/src/email/compose.rs @@ -416,7 +416,7 @@ mod tests { #[test] fn test_attachments() { - return; + /* let mut default = Draft::default(); default.set_body("αδφαφσαφασ".to_string()); @@ -434,6 +434,7 @@ mod tests { .set_content_transfer_encoding(ContentTransferEncoding::Base64); default.attachments_mut().push(attachment); println!("{}", default.finalise().unwrap()); + */ } } diff --git a/melib/src/email/parser.rs b/melib/src/email/parser.rs index 7108d396..193800f2 100644 --- a/melib/src/email/parser.rs +++ b/melib/src/email/parser.rs @@ -488,8 +488,13 @@ fn display_addr(input: &[u8]) -> IResult<&[u8], Address> { length: end, } }; + let rest_start = if input.len() > end + display_name.length + 2 { + end + display_name.length + 3 + } else { + end + display_name.length + 2 + }; IResult::Done( - &input[end + display_name.length + 3..], + &input[rest_start..], Address::Mailbox(MailboxAddress { raw, display_name, diff --git a/testing/src/email_parse.rs b/testing/src/email_parse.rs index 8e334c31..4e1bc28b 100644 --- a/testing/src/email_parse.rs +++ b/testing/src/email_parse.rs @@ -14,8 +14,8 @@ fn main() -> Result<()> { filename.display() )); let env = Envelope::from_bytes(&buffer.as_bytes(), None).expect("Couldn't parse email"); - debug!("Env is {:#?}", env); - debug!(env.body_bytes(buffer.as_bytes())); + eprintln!("Env is {:#?}", env); + eprintln!("{:?}", env.body_bytes(buffer.as_bytes())); } else { println!("it's not a file"); }