Skip to content

Commit

Permalink
lib-index: Do not crash if log is missing
Browse files Browse the repository at this point in the history
Fixes sigfault when index and index.log files are
corrupted.
  • Loading branch information
cmouse authored and sirainen committed Nov 21, 2016
1 parent 4330fa0 commit a48c485
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 0 deletions.
9 changes: 9 additions & 0 deletions src/lib-index/mail-index.c
Expand Up @@ -17,6 +17,7 @@
#include "mail-index-sync-private.h"
#include "mail-index-modseq.h"
#include "mail-transaction-log.h"
#include "mail-transaction-log-view-private.h"
#include "mail-cache.h"

#include <stdio.h>
Expand Down Expand Up @@ -600,8 +601,16 @@ int mail_index_open(struct mail_index *index, enum mail_index_open_flags flags)
mail_index_close_nonopened(index);
return ret;
}

index->open_count++;

if (index->log->head == NULL) {
mail_index_close(index);
mail_index_set_error(index, "Index is corrupted "
"(log->view->head == NULL)");
return -1;
}

i_assert(index->map != NULL);
mail_index_alloc_cache_index_opened(index);
return 1;
Expand Down
2 changes: 2 additions & 0 deletions src/lib-index/mail-transaction-log-view.c
Expand Up @@ -15,6 +15,8 @@ mail_transaction_log_view_open(struct mail_transaction_log *log)
view->log = log;
view->broken = TRUE;

i_assert(view->log->head != NULL);

view->head = view->tail = view->log->head;
view->head->refcount++;
i_array_init(&view->file_refs, 8);
Expand Down

0 comments on commit a48c485

Please sign in to comment.