# HG changeset patch # User Timo Sirainen # Date 1148978000 -10800 # Node ID b0ebcefc1967ae9ec4d8be34ee7e86bfeec1a412 # Parent 92bf418b8a60a6f112a32d992a8a8b364cb9e349 Removing and resetting keywords could have operated on wrong file's keyword list. diff -r 92bf418b8a60 -r b0ebcefc1967 src/lib-storage/index/dbox/dbox-sync.c --- 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: