]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Don't use data stack for mailbox list index header update
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Tue, 21 Sep 2021 13:37:13 +0000 (16:37 +0300)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Wed, 22 Sep 2021 11:11:23 +0000 (11:11 +0000)
There can be a lot of mailboxes, causing excessive data stack usage.

src/lib-storage/list/mailbox-list-index-sync.c

index 240aeb94349a1ff7f22025991d9aa7a5df127970..2994bb8173a7c5fa72fa4339b191510580f30e63 100644 (file)
@@ -157,11 +157,11 @@ mailbox_list_index_sync_names(struct mailbox_list_index_sync_context *ctx)
        uint32_t id, prev_id = 0;
 
        /* get all existing name IDs sorted */
-       t_array_init(&existing_name_ids, 64);
+       i_array_init(&existing_name_ids, 64);
        get_existing_name_ids(&existing_name_ids, ilist->mailbox_tree);
        array_sort(&existing_name_ids, uint32_cmp);
 
-       hdr_buf = t_buffer_create(1024);
+       hdr_buf = buffer_create_dynamic(default_pool, 1024);
        buffer_append_zero(hdr_buf, sizeof(struct mailbox_list_index_header));
 
        /* add existing names to header (with deduplication) */
@@ -188,6 +188,8 @@ mailbox_list_index_sync_names(struct mailbox_list_index_sync_context *ctx)
        }
        mail_index_update_header_ext(ctx->trans, ilist->ext_id,
                                     0, hdr_buf->data, hdr_buf->used);
+       buffer_free(&hdr_buf);
+       array_free(&existing_name_ids);
 }
 
 static void