From: Timo Sirainen Date: Tue, 11 Mar 2025 09:50:54 +0000 (+0200) Subject: lib-storage: mailbox_list_iter_next() - Fix memory allocation for special_use flags X-Git-Tag: 2.4.1~27 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=457e4b143d790b2b874bc0a4c208e6879678523e;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: mailbox_list_iter_next() - Fix memory allocation for special_use flags It's not safe to store the string into data stack. --- diff --git a/src/lib-storage/list/mailbox-list-iter.c b/src/lib-storage/list/mailbox-list-iter.c index 966c1140c8..6d41dfedb9 100644 --- a/src/lib-storage/list/mailbox-list-iter.c +++ b/src/lib-storage/list/mailbox-list-iter.c @@ -1025,9 +1025,13 @@ mailbox_list_iter_next_call(struct mailbox_list_iterate_context *ctx) return NULL; } if (array_not_empty(&set->special_use)) { + const char *flags = + t_array_const_string_join(&set->special_use, " "); ctx->specialuse_info = *info; + i_free(ctx->specialuse_info_flags); + ctx->specialuse_info_flags = i_strdup(flags); ctx->specialuse_info.special_use = - t_array_const_string_join(&set->special_use, " "); + ctx->specialuse_info_flags; info = &ctx->specialuse_info; } settings_free(set); @@ -1101,6 +1105,7 @@ int mailbox_list_iter_deinit(struct mailbox_list_iterate_context **_ctx) return -1; if (ctx->autocreate_ctx != NULL) hash_table_destroy(&ctx->autocreate_ctx->duplicate_vnames); + i_free(ctx->specialuse_info_flags); return ctx->list->v.iter_deinit(ctx); } diff --git a/src/lib-storage/mailbox-list-private.h b/src/lib-storage/mailbox-list-private.h index 0e078cfe50..8316afeca7 100644 --- a/src/lib-storage/mailbox-list-private.h +++ b/src/lib-storage/mailbox-list-private.h @@ -166,6 +166,7 @@ struct mailbox_list_iterate_context { struct imap_match_glob *glob; struct mailbox_list_autocreate_iterate_context *autocreate_ctx; struct mailbox_info specialuse_info; + char *specialuse_info_flags; ARRAY(union mailbox_list_iterate_module_context *) module_contexts; HASH_TABLE(const char *, void*) found_mailboxes;