From: Timo Sirainen Date: Tue, 3 May 2016 16:39:44 +0000 (+0300) Subject: lib-imap-storage: Allow HEADER.FIELDS(..) without space before '(' X-Git-Tag: 2.2.25.rc1~210 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=48713ea8a05c8be974e627ce82bc52d72e723db9;p=thirdparty%2Fdovecot%2Fcore.git 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 --- 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; }