]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Avoid calling mail_set_attachment_keywords() recursively
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Tue, 22 Feb 2022 16:47:55 +0000 (17:47 +0100)
committerMarco Bettini <marco.bettini@open-xchange.com>
Wed, 6 Jul 2022 13:41:50 +0000 (13:41 +0000)
It doesn't break, but it's unnecessary work.

src/lib-storage/index/index-mail.c
src/lib-storage/index/index-mail.h

index 48122b1673dbc80b27d46eaa2b947558282eaceb..a5a280dfc7ab16d1b6ba83ae28c19191d40dcb6f 100644 (file)
@@ -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
index 74107d277d26a2386df19c183e1399596cb527a2..deb2831e147381b5014697bd5717cbdc521b072a 100644 (file)
@@ -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;