Mercurial > dovecot > original-hg > dovecot-1.2
changeset 4281:b0ebcefc1967 HEAD
Removing and resetting keywords could have operated on wrong file's keyword
list.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Tue, 30 May 2006 11:33:20 +0300 |
parents | 92bf418b8a60 |
children | 7e1acaa7e76b |
files | src/lib-storage/index/dbox/dbox-sync.c |
diffstat | 1 files changed, 13 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/index/dbox/dbox-sync.c Tue May 30 11:32:24 2006 +0300 +++ b/src/lib-storage/index/dbox/dbox-sync.c Tue May 30 11:33:20 2006 +0300 @@ -251,11 +251,15 @@ static int dbox_sync_update_keyword(struct dbox_sync_context *ctx, + const struct dbox_sync_file_entry *entry, const struct dbox_sync_rec *sync_rec, bool set) { unsigned char keyword_array, keyword_mask = 1; unsigned int file_idx, first_flag_offset; + if (dbox_file_seek(ctx->mbox, entry->file_seq, 0) <= 0) + return -1; + keyword_array = set ? '1' : '0'; if (!dbox_file_lookup_keyword(ctx->mbox, ctx->mbox->file, @@ -276,12 +280,16 @@ static int dbox_sync_reset_keyword(struct dbox_sync_context *ctx, - const struct dbox_sync_rec *sync_rec) + const struct dbox_sync_file_entry *entry, + const struct dbox_sync_rec *sync_rec) { unsigned char *keyword_array, *keyword_mask; unsigned int first_flag_offset; int ret; + if (dbox_file_seek(ctx->mbox, entry->file_seq, 0) <= 0) + return -1; + if (ctx->mbox->file->keyword_count == 0) return 0; @@ -380,17 +388,18 @@ i) < 0) return -1; } - if (dbox_sync_update_keyword(ctx, &sync_recs[i], + if (dbox_sync_update_keyword(ctx, entry, &sync_recs[i], TRUE) < 0) return -1; break; case MAIL_INDEX_SYNC_TYPE_KEYWORD_REMOVE: - if (dbox_sync_update_keyword(ctx, &sync_recs[i], + if (dbox_sync_update_keyword(ctx, entry, &sync_recs[i], FALSE) < 0) return -1; break; case MAIL_INDEX_SYNC_TYPE_KEYWORD_RESET: - if (dbox_sync_reset_keyword(ctx, &sync_recs[i]) < 0) + if (dbox_sync_reset_keyword(ctx, entry, + &sync_recs[i]) < 0) return -1; break; case MAIL_INDEX_SYNC_TYPE_APPEND: