# HG changeset patch # User Timo Sirainen # Date 1224416773 -10800 # Node ID ab22ace4419015cabf904b93ba974f1a366a9c43 # Parent d3b37327936e70d2570414199a62b2fc8b1d4ff3 Maildir: Added more strict asserts. diff -r d3b37327936e -r ab22ace44190 src/lib-storage/index/maildir/maildir-uidlist.c --- a/src/lib-storage/index/maildir/maildir-uidlist.c Sun Oct 19 14:38:09 2008 +0300 +++ b/src/lib-storage/index/maildir/maildir-uidlist.c Sun Oct 19 14:46:13 2008 +0300 @@ -346,18 +346,20 @@ mhdr->uidlist_size = st->st_size; } -static void +static unsigned int maildir_uidlist_records_array_delete(struct maildir_uidlist *uidlist, struct maildir_uidlist_rec *rec) { struct maildir_uidlist_rec *const *recs, *const *pos; - unsigned int count; + unsigned int idx, count; recs = array_get(&uidlist->records, &count); pos = bsearch(&rec, recs, count, sizeof(*recs), maildir_uid_cmp); i_assert(pos != NULL); - array_delete(&uidlist->records, pos - recs, 1); + idx = pos - recs; + array_delete(&uidlist->records, idx, 1); + return idx; } static bool @@ -1462,24 +1464,25 @@ const char *filename) { struct maildir_uidlist_rec *rec; + unsigned int idx; i_assert(ctx->partial); - if (ctx->first_unwritten_pos != (unsigned int)-1) { - i_assert(ctx->first_unwritten_pos > 0); - ctx->first_unwritten_pos--; - } - if (ctx->first_nouid_pos != (unsigned int)-1) { - i_assert(ctx->first_nouid_pos > 0); - ctx->first_nouid_pos--; - } - rec = hash_lookup(ctx->uidlist->files, filename); i_assert(rec != NULL); i_assert(rec->uid != (uint32_t)-1); hash_remove(ctx->uidlist->files, filename); - maildir_uidlist_records_array_delete(ctx->uidlist, rec); + idx = maildir_uidlist_records_array_delete(ctx->uidlist, rec); + + if (ctx->first_unwritten_pos != (unsigned int)-1) { + i_assert(ctx->first_unwritten_pos > idx); + ctx->first_unwritten_pos--; + } + if (ctx->first_nouid_pos != (unsigned int)-1) { + i_assert(ctx->first_nouid_pos > idx); + ctx->first_nouid_pos--; + } ctx->changed = TRUE; ctx->uidlist->recreate = TRUE;