]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
maildir: Fix memory leak when mailbox opening fails
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Fri, 20 Oct 2017 08:04:41 +0000 (11:04 +0300)
committerTimo Sirainen <tss@dovecot.fi>
Mon, 23 Oct 2017 16:12:31 +0000 (19:12 +0300)
src/lib-storage/index/maildir/maildir-storage.c

index f45d5e08d2125ad1aee27bb8cc325056b4dcf323..01859e7bbf31eb99a842b92f28292ad9b764cb1e 100644 (file)
@@ -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",