From 27ab897f30b83ee1f17e4e2a801334d87eeabd02 Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan.bosch@open-xchange.com> Date: Mon, 20 Sep 2021 22:09:48 +0200 Subject: [PATCH] plugins: imapsieve: imap-sieve-storage - Make sure mail_set_uid() is never called with uid=0. --- src/plugins/imapsieve/imap-sieve-storage.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/plugins/imapsieve/imap-sieve-storage.c b/src/plugins/imapsieve/imap-sieve-storage.c index 53761c64e..f8e5efe9e 100644 --- a/src/plugins/imapsieve/imap-sieve-storage.c +++ b/src/plugins/imapsieve/imap-sieve-storage.c @@ -581,6 +581,7 @@ imap_sieve_mailbox_run_copy_source( return; i_assert(ismt->src_mail_trans->box == src_box); + i_assert(mevent->src_mail_uid > 0); if (*src_mail == NULL) *src_mail = mail_alloc(ismt->src_mail_trans, 0, NULL); @@ -741,11 +742,18 @@ imap_sieve_mailbox_transaction_run( bool fatal; /* Determine UID for saved message */ - if (mevent->dest_mail_uid > 0 || - !seq_range_array_iter_nth(&siter, mevent->save_seq, &uid)) + if (mevent->dest_mail_uid > 0) uid = mevent->dest_mail_uid; + else if (!seq_range_array_iter_nth(&siter, mevent->save_seq, + &uid)) { + /* already gone for some reason */ + imap_sieve_mailbox_debug( + sbox, "Message for Sieve event gone"); + continue; + } /* Select event message */ + i_assert(uid > 0); if (!mail_set_uid(mail, uid) || mail->expunged) { /* already gone for some reason */ imap_sieve_mailbox_debug(sbox, -- GitLab