changeset 9211:219ee9858156 HEAD

maildir: Added some checks for UIDs reaching 2^31-1. Saving messages when it's reached will be handled by assert-crash for now.
author Timo Sirainen <tss@iki.fi>
date Tue, 07 Jul 2009 23:52:06 -0400
parents df2d4e398c06
children 6d7f6ea02e17
files src/lib-storage/index/maildir/maildir-uidlist.c
diffstat 1 files changed, 9 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/index/maildir/maildir-uidlist.c	Tue Jul 07 23:35:04 2009 -0400
+++ b/src/lib-storage/index/maildir/maildir-uidlist.c	Tue Jul 07 23:52:06 2009 -0400
@@ -465,6 +465,11 @@
 					      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;
 
 	if (uid <= uidlist->last_seen_uid) {
@@ -1051,8 +1056,10 @@
 void maildir_uidlist_set_next_uid(struct maildir_uidlist *uidlist,
 				  uint32_t next_uid, bool force)
 {
-	if (uidlist->next_uid < next_uid || force)
+	if (uidlist->next_uid < next_uid || force) {
+		i_assert(next_uid != 0);
 		uidlist->next_uid = next_uid;
+	}
 }
 
 static void
@@ -1697,6 +1704,7 @@
 
 	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;
 	}