]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-imap-storage: Allow HEADER.FIELDS(..) without space before '('
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Tue, 3 May 2016 16:39:44 +0000 (19:39 +0300)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Tue, 14 Jun 2016 09:06:28 +0000 (12:06 +0300)
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

index d8039e0caa65a25c1cb7b424738087d12d0014e8..37e85b9ee9afc911e7aaa01d8a9b3b05b36c5726 100644 (file)
@@ -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;
                }