From 6c1b37194009d5a55f230b49e768f24dd02c7927 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Tue, 3 May 2016 19:39:44 +0300 Subject: [PATCH] lib-imap-storage: Allow HEADER.FIELDS(..) without space before '(' This is to allow doveadm fetch to use it. Attempting to do this without a space in IMAP already fails elsewhere: x fetch 1 body.peek[header.fields(from to)] x BAD Error in IMAP command FETCH: Invalid characters in atom --- src/lib-imap-storage/imap-msgpart.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/lib-imap-storage/imap-msgpart.c b/src/lib-imap-storage/imap-msgpart.c index d8039e0caa..37e85b9ee9 100644 --- a/src/lib-imap-storage/imap-msgpart.c +++ b/src/lib-imap-storage/imap-msgpart.c @@ -184,6 +184,9 @@ imap_msgpart_parse_header_fields(struct imap_msgpart *msgpart, { ARRAY_TYPE(const_string) fields; + if (header_list[0] == ' ') + header_list++; + /* HEADER.FIELDS (list), HEADER.FIELDS.NOT (list) */ if (imap_msgpart_get_header_fields(msgpart->pool, header_list, &fields) < 0) @@ -267,14 +270,14 @@ int imap_msgpart_parse(const char *section, struct imap_msgpart **msgpart_r) if (section[6] == '\0') { msgpart->fetch_type = FETCH_HEADER; ret = 0; - } else if (strncmp(section, "HEADER.FIELDS ", 14) == 0) { - msgpart->fetch_type = FETCH_HEADER_FIELDS; - ret = imap_msgpart_parse_header_fields(msgpart, - section+14); - } else if (strncmp(section, "HEADER.FIELDS.NOT ", 18) == 0) { + } else if (strncmp(section, "HEADER.FIELDS.NOT", 17) == 0) { msgpart->fetch_type = FETCH_HEADER_FIELDS_NOT; ret = imap_msgpart_parse_header_fields(msgpart, - section+18); + section+17); + } else if (strncmp(section, "HEADER.FIELDS", 13) == 0) { + msgpart->fetch_type = FETCH_HEADER_FIELDS; + ret = imap_msgpart_parse_header_fields(msgpart, + section+13); } else { ret = -1; }