From b2e91a83bd7f21b75fbf3494b65b926bf8e7907e Mon Sep 17 00:00:00 2001 From: Manos Pitsidianakis Date: Sat, 15 Sep 2018 20:05:34 +0300 Subject: [PATCH] Fix encoded-word parsing bug --- melib/src/mailbox/email/parser.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/melib/src/mailbox/email/parser.rs b/melib/src/mailbox/email/parser.rs index 6b0e0d03..69a1a4e0 100644 --- a/melib/src/mailbox/email/parser.rs +++ b/melib/src/mailbox/email/parser.rs @@ -653,11 +653,12 @@ pub fn phrase(input: &[u8]) -> IResult<&[u8], Vec> { let end = end.unwrap_or_else(|| input.len() - ptr) + ptr; let ascii_s = ptr; - let ascii_e; + let mut ascii_e; while ptr < end && !(is_whitespace!(input[ptr])) { ptr += 1; } + ascii_e = ptr; while ptr < input.len() && (is_whitespace!(input[ptr])) { ptr += 1; @@ -670,6 +671,14 @@ pub fn phrase(input: &[u8]) -> IResult<&[u8], Vec> { ); break; } + if ascii_s == ascii_e { + /* We have the start of an encoded word but not the end, so parse it as ascii */ + ascii_e = input[ascii_s..] + .find(b" ") + .unwrap_or_else(|| input[ascii_s..].len()); + ptr = ascii_e; + } + acc.extend( ascii_token(&input[ascii_s..ascii_e]) .to_full_result()