From: Timo Sirainen Date: Tue, 22 Feb 2022 16:47:55 +0000 (+0100) Subject: lib-storage: Avoid calling mail_set_attachment_keywords() recursively X-Git-Tag: 2.3.20~48 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=08bf01a739ce57326ed1cc8deccda40596436f1c;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: Avoid calling mail_set_attachment_keywords() recursively It doesn't break, but it's unnecessary work. --- 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;