]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
maildir: If uidlist has an empty GUID entry, log an error and remove it.
authorTimo Sirainen <tss@iki.fi>
Wed, 20 Apr 2011 14:44:36 +0000 (17:44 +0300)
committerTimo Sirainen <tss@iki.fi>
Wed, 20 Apr 2011 14:44:36 +0000 (17:44 +0300)
This fixes an assert-crash in dsync.

src/lib-storage/index/maildir/maildir-mail.c

index ca26d7870b1e2beab363ec958e3c12e4ba3e9037..492561ab321a8ce605e0ec4cd181666cf4422be7 100644 (file)
@@ -485,8 +485,17 @@ maildir_mail_get_special(struct mail *_mail, enum mail_fetch_field field,
                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: */