dovecot-2.2: lib-storage: Fixed assert-crash when saving mails i...

dovecot at dovecot.org dovecot at dovecot.org
Fri Feb 22 10:09:25 EET 2013


details:   http://hg.dovecot.org/dovecot-2.2/rev/0158c7b2c5db
changeset: 15884:0158c7b2c5db
user:      Timo Sirainen <tss at iki.fi>
date:      Fri Feb 22 10:09:19 2013 +0200
description:
lib-storage: Fixed assert-crash when saving mails if UIDs weren't assigned.

diffstat:

 src/lib-storage/mail-storage.c |  5 ++++-
 src/lib-storage/mail-storage.h |  4 +++-
 2 files changed, 7 insertions(+), 2 deletions(-)

diffs (36 lines):

diff -r 3fb9a8bc35aa -r 0158c7b2c5db src/lib-storage/mail-storage.c
--- a/src/lib-storage/mail-storage.c	Thu Feb 21 19:30:38 2013 +0200
+++ b/src/lib-storage/mail-storage.c	Fri Feb 22 10:09:19 2013 +0200
@@ -1745,6 +1745,7 @@
 {
 	struct mailbox_transaction_context *t = *_t;
 	unsigned int save_count = t->save_count;
+	bool assign_uids = (t->flags & MAILBOX_TRANSACTION_FLAG_ASSIGN_UIDS) != 0;
 	int ret;
 
 	t->box->transaction_count--;
@@ -1754,7 +1755,9 @@
 	T_BEGIN {
 		ret = t->box->v.transaction_commit(t, changes_r);
 	} T_END;
-	i_assert(ret < 0 || seq_range_count(&changes_r->saved_uids) == save_count);
+	i_assert(ret < 0 ||
+		 seq_range_count(&changes_r->saved_uids) == save_count ||
+		 (array_count(&changes_r->saved_uids) == 0 && !assign_uids));
 	if (ret < 0 && changes_r->pool != NULL)
 		pool_unref(&changes_r->pool);
 	return ret;
diff -r 3fb9a8bc35aa -r 0158c7b2c5db src/lib-storage/mail-storage.h
--- a/src/lib-storage/mail-storage.h	Thu Feb 21 19:30:38 2013 +0200
+++ b/src/lib-storage/mail-storage.h	Fri Feb 22 10:09:19 2013 +0200
@@ -299,7 +299,9 @@
 
 	/* UIDVALIDITY for assigned UIDs. */
 	uint32_t uid_validity;
-	/* UIDs assigned to saved messages. Not necessarily ascending. */
+	/* UIDs assigned to saved messages. Not necessarily ascending.
+	   If UID assignment wasn't required (e.g. LDA), this array may also be
+	   empty. Otherwise all of the saved mails got an UID. */
 	ARRAY_TYPE(seq_range) saved_uids;
 
 	/* number of modseq changes that couldn't be changed as requested */


More information about the dovecot-cvs mailing list