From 08bf01a739ce57326ed1cc8deccda40596436f1c Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Tue, 22 Feb 2022 17:47:55 +0100 Subject: [PATCH] lib-storage: Avoid calling mail_set_attachment_keywords() recursively It doesn't break, but it's unnecessary work. --- src/lib-storage/index/index-mail.c | 6 ++++++ src/lib-storage/index/index-mail.h | 1 + 2 files changed, 7 insertions(+) diff --git a/src/lib-storage/index/index-mail.c b/src/lib-storage/index/index-mail.c index 48122b1673..a5a280dfc7 100644 --- a/src/lib-storage/index/index-mail.c +++ b/src/lib-storage/index/index-mail.c @@ -98,10 +98,16 @@ int index_mail_cache_lookup_field(struct index_mail *mail, buffer_t *buf, static void index_mail_try_set_attachment_keywords(struct index_mail *mail) { + if (mail->data.attachment_flags_updating) { + /* We can get here from mail_get_parts() */ + return; + } + mail->data.attachment_flags_updating = TRUE; enum mail_lookup_abort orig_lookup_abort = mail->mail.mail.lookup_abort; mail->mail.mail.lookup_abort = MAIL_LOOKUP_ABORT_NOT_IN_CACHE; (void)mail_set_attachment_keywords(&mail->mail.mail); mail->mail.mail.lookup_abort = orig_lookup_abort; + mail->data.attachment_flags_updating = FALSE; } static bool diff --git a/src/lib-storage/index/index-mail.h b/src/lib-storage/index/index-mail.h index 74107d277d..deb2831e14 100644 --- a/src/lib-storage/index/index-mail.h +++ b/src/lib-storage/index/index-mail.h @@ -131,6 +131,7 @@ struct index_mail_data { bool destroy_callback_set:1; bool prefetch_sent:1; bool header_parser_initialized:1; + bool attachment_flags_updating:1; /* virtual_size and physical_size may not match the stream size. Try to avoid trusting them too much. */ bool inexact_total_sizes:1; -- 2.47.3