From 68969d3f5b70bceae90e551686b925c9dd5dc2be Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Fri, 20 Oct 2017 11:04:41 +0300 Subject: [PATCH] maildir: Fix memory leak when mailbox opening fails --- src/lib-storage/index/maildir/maildir-storage.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/lib-storage/index/maildir/maildir-storage.c b/src/lib-storage/index/maildir/maildir-storage.c index f45d5e08d2..01859e7bbf 100644 --- a/src/lib-storage/index/maildir/maildir-storage.c +++ b/src/lib-storage/index/maildir/maildir-storage.c @@ -31,6 +31,8 @@ static MODULE_CONTEXT_DEFINE_INIT(maildir_mailbox_list_module, &mailbox_list_module_register); static const char *maildir_subdirs[] = { "cur", "new", "tmp" }; +static void maildir_mailbox_close(struct mailbox *box); + static struct mail_storage *maildir_storage_alloc(void) { struct maildir_storage *storage; @@ -295,15 +297,19 @@ static int maildir_mailbox_open_existing(struct mailbox *box) mbox->keywords = maildir_keywords_init(mbox); if ((box->flags & MAILBOX_FLAG_KEEP_LOCKED) != 0) { - if (maildir_uidlist_lock(mbox->uidlist) <= 0) + if (maildir_uidlist_lock(mbox->uidlist) <= 0) { + maildir_mailbox_close(box); return -1; + } mbox->keep_lock_to = timeout_add(MAILDIR_LOCK_TOUCH_SECS * 1000, maildir_lock_touch_timeout, mbox); } - if (index_storage_mailbox_open(box, FALSE) < 0) + if (index_storage_mailbox_open(box, FALSE) < 0) { + maildir_mailbox_close(box); return -1; + } mbox->maildir_ext_id = mail_index_ext_register(mbox->box.index, "maildir",