From d8e9a00563c023abb0ff75aaa4ba3fa92626c5ce Mon Sep 17 00:00:00 2001 From: Manos Pitsidianakis Date: Thu, 25 Nov 2021 17:53:01 +0200 Subject: [PATCH] melib/imap: add quoted REFERENCES field in parsing of responses --- melib/src/backends/imap/protocol_parser.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/melib/src/backends/imap/protocol_parser.rs b/melib/src/backends/imap/protocol_parser.rs index 92aff142..465ce96a 100644 --- a/melib/src/backends/imap/protocol_parser.rs +++ b/melib/src/backends/imap/protocol_parser.rs @@ -676,6 +676,22 @@ pub fn fetch_response(input: &[u8]) -> ImapParseResult> { String::from_utf8_lossy(&input[i..]) )))); } + } else if input[i..].starts_with(b"BODY[HEADER.FIELDS (\"REFERENCES\")] ") { + i += b"BODY[HEADER.FIELDS (\"REFERENCES\")] ".len(); + if let Ok((rest, mut references)) = astring_token(&input[i..]) { + if !references.trim().is_empty() { + if let Ok((_, (_, v))) = crate::email::parser::headers::header(&references) { + references = v; + } + ret.references = Some(references); + } + i += input.len() - i - rest.len(); + } else { + return debug!(Err(MeliError::new(format!( + "Unexpected input while parsing UID FETCH response. Got: `{:.40}`", + String::from_utf8_lossy(&input[i..]) + )))); + } } else if input[i..].starts_with(b")\r\n") { i += b")\r\n".len(); break;