From: Marco Bettini Date: Mon, 28 Feb 2022 16:12:32 +0000 (+0100) Subject: fts: Parse mail header before checking whether to index it X-Git-Tag: 2.3.19~52 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9a355e8aa7f06579e20cdc1a05dabb0dbfb59a43;p=thirdparty%2Fdovecot%2Fcore.git fts: Parse mail header before checking whether to index it 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 --- diff --git a/src/plugins/fts/fts-build-mail.c b/src/plugins/fts/fts-build-mail.c index 523f2b5019..73d4f4b845 100644 --- a/src/plugins/fts/fts-build-mail.c +++ b/src/plugins/fts/fts-build-mail.c @@ -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 */