dovecot-2.0: maildir: Added some checks for UIDs reaching 2^31-1.

dovecot at dovecot.org dovecot at dovecot.org
Wed Jul 8 06:53:25 EEST 2009


details:   http://hg.dovecot.org/dovecot-2.0/rev/a1dfbec72a6f
changeset: 9588:a1dfbec72a6f
user:      Timo Sirainen <tss at iki.fi>
date:      Tue Jul 07 23:53:18 2009 -0400
description:
maildir: Added some checks for UIDs reaching 2^31-1.
Saving messages when it's reached will be handled by assert-crash for now.

diffstat:

1 file changed, 7 insertions(+)
src/lib-storage/index/maildir/maildir-uidlist.c |    7 +++++++

diffs (31 lines):

diff -r 3788f3b0f9b2 -r a1dfbec72a6f src/lib-storage/index/maildir/maildir-uidlist.c
--- a/src/lib-storage/index/maildir/maildir-uidlist.c	Tue Jul 07 23:37:22 2009 -0400
+++ b/src/lib-storage/index/maildir/maildir-uidlist.c	Tue Jul 07 23:53:18 2009 -0400
@@ -468,6 +468,11 @@ static bool maildir_uidlist_next(struct 
 		maildir_uidlist_set_corrupted(uidlist, 
 					      "UIDs not ordered (%u >= %u)",
 					      uid, uidlist->prev_read_uid);
+		return FALSE;
+	}
+	if (uid >= (uint32_t)-1) {
+		maildir_uidlist_set_corrupted(uidlist,
+					      "UID too high (%u)", uid);
 		return FALSE;
 	}
 	uidlist->prev_read_uid = uid;
@@ -1113,6 +1118,7 @@ void maildir_uidlist_set_next_uid(struct
 				  uint32_t next_uid, bool force)
 {
 	if (uidlist->next_uid < next_uid || force) {
+		i_assert(next_uid != 0);
 		uidlist->next_uid = next_uid;
 		uidlist->recreate = TRUE;
 	}
@@ -1776,6 +1782,7 @@ static void maildir_uidlist_assign_uids(
 
 	for (dest = ctx->first_nouid_pos; dest < count; dest++) {
 		i_assert(recs[dest]->uid == (uint32_t)-1);
+		i_assert(ctx->uidlist->next_uid < (uint32_t)-1);
 		recs[dest]->uid = ctx->uidlist->next_uid++;
 		recs[dest]->flags &= ~MAILDIR_UIDLIST_REC_FLAG_MOVED;
 	}


More information about the dovecot-cvs mailing list