From 9e6e5ee02147e656aadf61ca55ba0f260a8d2673 Mon Sep 17 00:00:00 2001
From: Stephan Bosch <stephan@dovecot.fi>
Date: Thu, 23 Jun 2016 13:30:49 +0200
Subject: [PATCH] imapsieve plugin: During transaction run the synchronized
 version of the target mailbox was opened too early.

This meant opening a mailbox a second time even if it did not match any mailbox rules.
---
 src/plugins/imapsieve/imap-sieve-storage.c | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

diff --git a/src/plugins/imapsieve/imap-sieve-storage.c b/src/plugins/imapsieve/imap-sieve-storage.c
index 0d5aee533..5954b25e3 100644
--- a/src/plugins/imapsieve/imap-sieve-storage.c
+++ b/src/plugins/imapsieve/imap-sieve-storage.c
@@ -595,13 +595,6 @@ imap_sieve_mailbox_transaction_run(
 			(user, isuser->client->lda_set);
 	}
 
-	/* Get synchronized view on the mailbox */
-	sbox = mailbox_alloc(box->list, box->vname, 0);
-	if (mailbox_sync(sbox, 0) < 0) {
-		mailbox_free(&sbox);
-		return -1;
-	}
-
 	can_discard = FALSE;
 	switch (isuser->cur_cmd) {
 	case IMAP_SIEVE_CMD_APPEND:
@@ -655,10 +648,16 @@ imap_sieve_mailbox_transaction_run(
 
 	if (ret <= 0) {
 		// FIXME: temp fail should be handled properly
-		mailbox_free(&sbox);
 		return 0;
 	}
 
+	/* Get synchronized view on the mailbox */
+	sbox = mailbox_alloc(box->list, box->vname, 0);
+	if (mailbox_sync(sbox, 0) < 0) {
+		mailbox_free(&sbox);
+		return -1;
+	}
+
 	/* Create transaction for event messages */
 	st = mailbox_transaction_begin(sbox, 0);
 	headers_ctx = mailbox_header_lookup_init(sbox, wanted_headers);
-- 
GitLab