]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
fts: Parse mail header before checking whether to index it
authorMarco Bettini <marco.bettini@open-xchange.com>
Mon, 28 Feb 2022 16:12:32 +0000 (17:12 +0100)
committerMarco Bettini <marco.bettini@open-xchange.com>
Tue, 1 Mar 2022 10:10:14 +0000 (11:10 +0100)
Fixes an issue where mime parts Content-type wasn't properly set,
causing binary mime parts to be fed to the indexes.

Broken in ddb85f3533842aa7c4e943c10bbd3dcb745c2eae

src/plugins/fts/fts-build-mail.c

index 523f2b50197cc62403f80e0e62925a65e6199274..73d4f4b845139b473f155b0816f8403c3e371a21 100644 (file)
@@ -536,12 +536,12 @@ header_prefix_cmp(const char *const *pkey, const char *const *pitem)
 }
 
 static bool
-is_header_indexable(struct message_block *block, struct fts_backend *backend)
+is_header_indexable(const char *header_name, struct fts_backend *backend)
 {
-       struct fts_header_filters *filters = load_header_filters(backend);
        bool indexable;
        T_BEGIN {
-               const char *hdr = t_str_lcase(block->hdr->name);
+               struct fts_header_filters *filters = load_header_filters(backend);
+               const char *hdr = t_str_lcase(header_name);
 
                if (array_bsearch(&filters->includes, &hdr, header_prefix_cmp) != NULL)
                        indexable = TRUE;
@@ -649,12 +649,11 @@ fts_build_mail_real(struct fts_backend_update_context *update_ctx,
                        continue;
 
                if (block.hdr != NULL) {
-                       if (is_header_indexable(&block, update_ctx->backend)) {
-                               fts_parse_mail_header(&ctx, &raw_block);
-                               if (fts_build_mail_header(&ctx, &block) < 0) {
-                                       ret = -1;
-                                       break;
-                               }
+                       fts_parse_mail_header(&ctx, &raw_block);
+                       if (is_header_indexable(block.hdr->name, update_ctx->backend) &&
+                           fts_build_mail_header(&ctx, &block) < 0) {
+                               ret = -1;
+                               break;
                        }
                } else if (block.size == 0) {
                        /* end of headers */