Mercurial > dovecot > original-hg > dovecot-1.2
changeset 5958:5825961b9862 HEAD
Make sure that uid < next_uid if uidlist version is 1.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Thu, 12 Jul 2007 04:24:22 +0300 |
parents | 874428d05272 |
children | 5513182aed67 |
files | src/lib-storage/index/maildir/maildir-uidlist.c |
diffstat | 1 files changed, 14 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/index/maildir/maildir-uidlist.c Thu Jul 12 04:24:00 2007 +0300 +++ b/src/lib-storage/index/maildir/maildir-uidlist.c Thu Jul 12 04:24:22 2007 +0300 @@ -324,6 +324,13 @@ } uidlist->last_seen_uid = uid; + if (uid >= uidlist->next_uid && uidlist->version == 1) { + mail_storage_set_critical(storage, + "UID larger than next_uid in file %s (%u >= %u)", + uidlist->path, uid, uidlist->next_uid); + return 0; + } + rec = p_new(uidlist->record_pool, struct maildir_uidlist_rec, 1); rec->uid = uid; rec->flags = MAILDIR_UIDLIST_REC_FLAG_NONSYNCED; @@ -385,6 +392,13 @@ uidlist->path); return 0; } + if (uid_validity == uidlist->uid_validity && + next_uid < uidlist->next_uid) { + mail_storage_set_critical(storage, + "%s: next_uid was lowered (v1, %u -> %u)", + uidlist->path, uidlist->next_uid, next_uid); + return 0; + } break; case 3: ext_hdr = uidlist->hdr_extensions;