Mercurial > dovecot > original-hg > dovecot-1.2
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; }