Mercurial > dovecot > core-2.2
changeset 334:e34e14d758eb HEAD
Cached MessagePart reading wasn't working because alignment broke the strict
size checking.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 30 Sep 2002 02:08:18 +0300 |
parents | fad3998041d4 |
children | 526ebe074df1 |
files | src/lib-index/mail-index-update.c src/lib-index/mail-index-util.c src/lib-index/mail-index.h src/lib-index/mbox/mbox-fsck.c src/lib-index/mbox/mbox-index.c src/lib-mail/message-part-serialize.c src/lib-storage/index/index-msgcache.c |
diffstat | 7 files changed, 13 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-index/mail-index-update.c Mon Sep 30 01:08:29 2002 +0300 +++ b/src/lib-index/mail-index-update.c Mon Sep 30 02:08:18 2002 +0300 @@ -416,8 +416,7 @@ if (part == NULL) { /* corrupted, rebuild it */ index_set_corrupted(update->index, - "Corrupted cached " - "MessagePart data"); + "Corrupted cached MessagePart data"); } }
--- a/src/lib-index/mail-index-util.c Mon Sep 30 01:08:29 2002 +0300 +++ b/src/lib-index/mail-index-util.c Mon Sep 30 02:08:18 2002 +0300 @@ -129,9 +129,8 @@ if (!message_part_deserialize_size(part_data, size, &hdr_size, &body_size)) { /* corrupted, ignore */ - index_set_error(index, "Error in index file %s: " - "Corrupted cached MessagePart data", - index->filepath); + index_set_corrupted(index, + "Corrupted cached MessagePart data"); } else { *virtual_size = hdr_size.virtual_size + body_size.virtual_size;
--- a/src/lib-index/mail-index.h Mon Sep 30 01:08:29 2002 +0300 +++ b/src/lib-index/mail-index.h Mon Sep 30 02:08:18 2002 +0300 @@ -289,6 +289,8 @@ void (*update_field)(MailIndexUpdate *update, MailField field, const char *value, size_t extra_space); + /* Just remember that full_field_size will be MEM_ALIGNed, so + it may differer from the given size parameter. */ void (*update_field_raw)(MailIndexUpdate *update, MailField field, const void *value, size_t size);
--- a/src/lib-index/mbox/mbox-fsck.c Mon Sep 30 01:08:29 2002 +0300 +++ b/src/lib-index/mbox/mbox-fsck.c Mon Sep 30 02:08:18 2002 +0300 @@ -37,7 +37,7 @@ /* MD5 sums must match */ old_digest = index->lookup_field_raw(index, rec, FIELD_TYPE_MD5, &size); - return old_digest != NULL && size == 16 && + return old_digest != NULL && size >= 16 && memcmp(old_digest, current_digest, 16) == 0; }
--- a/src/lib-index/mbox/mbox-index.c Mon Sep 30 01:08:29 2002 +0300 +++ b/src/lib-index/mbox/mbox-index.c Mon Sep 30 02:08:18 2002 +0300 @@ -402,7 +402,7 @@ "for record %u", rec->uid); *offset = 0; return FALSE; - } else if (size != sizeof(uoff_t) || *location > OFF_T_MAX) { + } else if (size < sizeof(uoff_t) || *location > OFF_T_MAX) { index_data_set_corrupted(index->data, "Invalid location field " "for record %u", rec->uid); *offset = 0;
--- a/src/lib-mail/message-part-serialize.c Mon Sep 30 01:08:29 2002 +0300 +++ b/src/lib-mail/message-part-serialize.c Mon Sep 30 02:08:18 2002 +0300 @@ -146,7 +146,7 @@ size_t count; /* make sure it looks valid */ - if (size == 0 || (size % sizeof(SerializedMessagePart)) != 0) + if (size < sizeof(SerializedMessagePart)) return NULL; spart = data; @@ -167,7 +167,7 @@ size_t i, count; /* make sure it looks valid */ - if (size == 0 || (size % sizeof(SerializedMessagePart)) != 0) + if (size < sizeof(SerializedMessagePart)) return FALSE; if (hdr_size->physical_size >= OFF_T_MAX || @@ -204,7 +204,7 @@ const SerializedMessagePart *spart = data; /* make sure it looks valid */ - if (size == 0 || (size % sizeof(SerializedMessagePart)) != 0) + if (size < sizeof(SerializedMessagePart)) return FALSE; hdr_size->physical_size = spart->header_physical_size;
--- a/src/lib-storage/index/index-msgcache.c Mon Sep 30 01:08:29 2002 +0300 +++ b/src/lib-storage/index/index-msgcache.c Mon Sep 30 02:08:18 2002 +0300 @@ -5,6 +5,7 @@ #include "imap-message-cache.h" #include "message-part-serialize.h" #include "mail-index.h" +#include "mail-index-util.h" #include <unistd.h> @@ -83,8 +84,8 @@ part = message_part_deserialize(pool, part_data, part_size); if (part == NULL) { - i_error("Error in index file %s: Corrupted cached " - "MessagePart data", ctx->index->filepath); + index_set_corrupted(ctx->index, + "Corrupted cached MessagePart data"); return NULL; }