]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
virtual: Fix crash when saving to virtual mailbox whose physical box doesn't exist
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Fri, 17 Nov 2017 22:44:12 +0000 (00:44 +0200)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Sun, 19 Nov 2017 15:04:34 +0000 (17:04 +0200)
For example if using "!foo" in dovecot-virtual and "foo" doesn't exist, it crashed.
Now it gives a nice error message instead.

src/plugins/virtual/virtual-storage.c

index e5894691b1ee03f98bbb7599977f512fc7a9036d..ac98a78afa63cd01d8e23f16b764ac69e0433353 100644 (file)
@@ -197,8 +197,15 @@ static int virtual_backend_box_alloc(struct virtual_mailbox *mbox,
                t_strdup_printf("virtual mailbox %s", mailbox_get_vname(&mbox->box)) :
                t_strdup_printf("virtual mailbox %s: %s", mailbox_get_vname(&mbox->box), mbox->box.reason));
 
-       if (mailbox_exists(bbox->box, TRUE, &existence) < 0)
-               return virtual_backend_box_open_failed(mbox, bbox);
+       if (bbox == mbox->save_bbox) {
+               /* Assume that the save_bbox exists, whether or not it truly
+                  does. This at least gives a better error message than crash
+                  later on. */
+               existence = MAILBOX_EXISTENCE_SELECT;
+       } else {
+               if (mailbox_exists(bbox->box, TRUE, &existence) < 0)
+                       return virtual_backend_box_open_failed(mbox, bbox);
+       }
        if (existence != MAILBOX_EXISTENCE_SELECT) {
                /* ignore this. it could be intentional. */
                if (mbox->storage->storage.user->mail_debug) {