Mercurial > dovecot > core-2.2
changeset 2331:e5748645a9d6 HEAD
Don't crash if mail_index_view_sync_next() is called again after it's finished.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sun, 18 Jul 2004 15:31:27 +0300 |
parents | f6c6ad1a55f9 |
children | 7e02790ded71 |
files | src/lib-index/mail-index-view-sync.c src/lib-index/mail-transaction-log-view.c |
diffstat | 2 files changed, 9 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-index/mail-index-view-sync.c Sun Jul 18 05:31:13 2004 +0300 +++ b/src/lib-index/mail-index-view-sync.c Sun Jul 18 15:31:27 2004 +0300 @@ -71,6 +71,10 @@ return ret; } +#define MAIL_INDEX_VIEW_VISIBLE_SYNC_MASK \ + (MAIL_TRANSACTION_EXPUNGE | MAIL_TRANSACTION_APPEND | \ + MAIL_TRANSACTION_FLAG_UPDATE) + int mail_index_view_sync_begin(struct mail_index_view *view, enum mail_index_sync_type sync_mask, struct mail_index_view_sync_ctx **ctx_r) @@ -98,10 +102,10 @@ /* only flags, appends and expunges can be left to be synced later */ want_mask = mail_transaction_type_mask_get(sync_mask); + i_assert((want_mask & ~MAIL_INDEX_VIEW_VISIBLE_SYNC_MASK) == 0); mask = want_mask | (MAIL_TRANSACTION_TYPE_MASK ^ - (MAIL_TRANSACTION_EXPUNGE | MAIL_TRANSACTION_APPEND | - MAIL_TRANSACTION_FLAG_UPDATE)); + MAIL_INDEX_VIEW_VISIBLE_SYNC_MASK); if (mail_transaction_log_view_set(view->log_view, view->log_file_seq, @@ -177,6 +181,7 @@ if (ret < 0) return -1; + ctx->hdr = NULL; ctx->last_read = TRUE; return 1; }
--- a/src/lib-index/mail-transaction-log-view.c Sun Jul 18 05:31:13 2004 +0300 +++ b/src/lib-index/mail-transaction-log-view.c Sun Jul 18 15:31:27 2004 +0300 @@ -235,6 +235,8 @@ for (;;) { file = view->cur; + if (file == NULL) + return 0; view->prev_file_seq = file->hdr.file_seq; view->prev_file_offset = view->cur_offset; @@ -244,9 +246,6 @@ view->cur = file->next; view->cur_offset = sizeof(struct mail_transaction_log_header); - - if (view->cur == NULL) - return 0; } data = buffer_get_data(file->buffer, &file_size);