changeset 12953:d3d635ee3016

maildir: If uidlist has an empty GUID entry, log an error and remove it. This fixes an assert-crash in dsync.
author Timo Sirainen <tss@iki.fi>
date Wed, 20 Apr 2011 17:44:36 +0300
parents 811a6d173bb2
children 4fe53879ceb1
files src/lib-storage/index/maildir/maildir-mail.c
diffstat 1 files changed, 11 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-storage/index/maildir/maildir-mail.c	Wed Apr 13 12:40:48 2011 +0300
+++ b/src/lib-storage/index/maildir/maildir-mail.c	Wed Apr 20 17:44:36 2011 +0300
@@ -485,8 +485,17 @@
 		guid = maildir_uidlist_lookup_ext(mbox->uidlist, _mail->uid,
 						  MAILDIR_UIDLIST_REC_EXT_GUID);
 		if (guid != NULL) {
-			*value_r = p_strdup(mail->data_pool, guid);
-			return 0;
+			if (*guid != '\0') {
+				*value_r = p_strdup(mail->data_pool, guid);
+				return 0;
+			}
+
+			mail_storage_set_critical(_mail->box->storage,
+				"Maildir %s: Corrupted dovecot-uidlist: "
+				"UID %u had empty GUID, clearing it",
+				_mail->box->path, _mail->uid);
+			maildir_uidlist_set_ext(mbox->uidlist, _mail->uid,
+				MAILDIR_UIDLIST_REC_EXT_GUID, NULL);
 		}
 
 		/* default to base filename: */