changeset 9519:d00abdaf9df2 HEAD

maildir: Fixed potential assert-crashes with "Duplicate file entry" handling.
author Timo Sirainen <tss@iki.fi>
date Wed, 23 Dec 2009 13:02:55 -0500
parents ef7b42b237bd
children d1548d794f72
files src/lib-storage/index/maildir/maildir-uidlist.c
diffstat 1 files changed, 12 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/index/maildir/maildir-uidlist.c	Tue Dec 22 18:22:43 2009 -0500
+++ b/src/lib-storage/index/maildir/maildir-uidlist.c	Wed Dec 23 13:02:55 2009 -0500
@@ -399,10 +399,18 @@
 	unsigned int idx, count;
 
 	recs = array_get(&uidlist->records, &count);
-	pos = bsearch(&rec, recs, count, sizeof(*recs), maildir_uid_cmp);
-	i_assert(pos != NULL);
-
-	idx = pos - recs;
+	if (!uidlist->unsorted) {
+		pos = bsearch(&rec, recs, count, sizeof(*recs),
+			      maildir_uid_cmp);
+		i_assert(pos != NULL);
+		idx = pos - recs;
+	} else {
+		for (idx = 0; idx < count; idx++) {
+			if (recs[idx]->uid == rec->uid)
+				break;
+		}
+		i_assert(idx != count);
+	}
 	array_delete(&uidlist->records, idx, 1);
 	return idx;
 }