if (message_binary_part_deserialize(mail->mail.data_pool,
part_buf->data, part_buf->used,
&mail->data.bin_parts) < 0) {
- mail_cache_set_corrupted(mail->mail.mail.box->cache,
+ mail_set_mail_cache_corrupted(&mail->mail.mail,
"Corrupted cached binary.parts data");
return FALSE;
}
} T_END;
if (ret < 0 && retry) {
- mail_cache_set_corrupted(_mail->box->cache,
- "Broken header %s for mail UID %u",
- field, _mail->uid);
+ mail_set_mail_cache_corrupted(_mail, "Broken header %s",
+ field);
} else {
break;
}
} T_END;
if (ret < 0 && retry) {
- mail_cache_set_corrupted(_mail->box->cache,
- "Broken header %s for mail UID %u",
- field, _mail->uid);
+ mail_set_mail_cache_corrupted(_mail, "Broken header %s",
+ field);
/* retry by parsing the full header */
} else {
break;
parts = message_part_deserialize(mail->mail.data_pool, part_buf->data,
part_buf->used, &error);
if (parts == NULL) {
- mail_cache_set_corrupted(mail->mail.mail.box->cache,
+ mail_set_mail_cache_corrupted(&mail->mail.mail,
"Corrupted cached mime.parts data: %s (parts=%s)",
error, binary_to_hex(part_buf->data, part_buf->used));
}
imail->data.no_caching = TRUE;
imail->data.forced_no_caching = TRUE;
if (reason[0] == '\0') {
- mail_cache_set_corrupted(mail->box->cache,
- "Broken %s for mail UID %u in mailbox %s",
- field_name, mail->uid, mail->box->vname);
+ mail_set_mail_cache_corrupted(mail,
+ "Broken %s in mailbox %s",
+ field_name, mail->box->vname);
} else {
- mail_cache_set_corrupted(mail->box->cache,
- "Broken %s for mail UID %u in mailbox %s: %s",
- field_name, mail->uid, mail->box->vname, reason);
+ mail_set_mail_cache_corrupted(mail,
+ "Broken %s in mailbox %s: %s",
+ field_name, mail->box->vname, reason);
}
mail_storage_set_internal_error(mail->box->storage);
}
including to the uidlist if it's already in filename.
do some extra checks here to catch potential cache bugs. */
if (vsize && mail->data.virtual_size != size) {
- mail_cache_set_corrupted(box->cache,
- "Corrupted virtual size for uid=%u: "
+ mail_set_mail_cache_corrupted(&mail->mail.mail,
+ "Corrupted virtual size: "
"%"PRIuUOFF_T" != %"PRIuUOFF_T,
- mail->mail.mail.uid,
mail->data.virtual_size, size);
mail->data.virtual_size = size;
} else if (!vsize && mail->data.physical_size != size) {
- mail_cache_set_corrupted(box->cache,
- "Corrupted physical size for uid=%u: "
+ mail_set_mail_cache_corrupted(&mail->mail.mail,
+ "Corrupted physical size: "
"%"PRIuUOFF_T" != %"PRIuUOFF_T,
- mail->mail.mail.uid,
mail->data.physical_size, size);
mail->data.physical_size = size;
}
struct mailbox_list *list);
void mail_storage_copy_error(struct mail_storage *dest,
struct mail_storage *src);
+/* set record in mail cache corrupted */
+void mail_set_mail_cache_corrupted(struct mail *mail, const char *fmt, ...);
/* Indicate mail being expunged by autoexpunge */
void mail_autoexpunge(struct mail *mail);
return -1;
}
}
+
+void mail_set_mail_cache_corrupted(struct mail *mail, const char *fmt, ...)
+{
+ struct mail_cache_view *cache_view =
+ mail->transaction->cache_view;
+
+ i_assert(cache_view != NULL);
+
+ va_list va;
+ va_start(va, fmt);
+
+ T_BEGIN {
+ mail_cache_set_seq_corrupted_reason(cache_view, mail->uid,
+ t_strdup_printf("UID %u: %s",
+ mail->uid,
+ t_strdup_vprintf(fmt, va)));
+ } T_END;
+
+ va_end(va);
+}