From: Timo Sirainen Date: Fri, 17 Nov 2017 22:44:12 +0000 (+0200) Subject: virtual: Fix crash when saving to virtual mailbox whose physical box doesn't exist X-Git-Tag: 2.3.0.rc1~431 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ca0cfbcd16563416b37e3c3e9062349a9d1c9cf7;p=thirdparty%2Fdovecot%2Fcore.git virtual: Fix crash when saving to virtual mailbox whose physical box doesn't exist For example if using "!foo" in dovecot-virtual and "foo" doesn't exist, it crashed. Now it gives a nice error message instead. --- diff --git a/src/plugins/virtual/virtual-storage.c b/src/plugins/virtual/virtual-storage.c index e5894691b1..ac98a78afa 100644 --- a/src/plugins/virtual/virtual-storage.c +++ b/src/plugins/virtual/virtual-storage.c @@ -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) {