dovecot-1.2: maildir: Added some checks for UIDs reaching 2^31-1.
dovecot at dovecot.org
dovecot at dovecot.org
Wed Jul 8 06:52:19 EEST 2009
details: http://hg.dovecot.org/dovecot-1.2/rev/219ee9858156
changeset: 9211:219ee9858156
user: Timo Sirainen <tss at iki.fi>
date: Tue Jul 07 23:52:06 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, 9 insertions(+), 1 deletion(-)
src/lib-storage/index/maildir/maildir-uidlist.c | 10 +++++++++-
diffs (35 lines):
diff -r df2d4e398c06 -r 219ee9858156 src/lib-storage/index/maildir/maildir-uidlist.c
--- 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
@@ -463,6 +463,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;
@@ -1051,8 +1056,10 @@ void maildir_uidlist_set_next_uid(struct
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 @@ 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