From 6e1a910370a55db38b97e12026cd69b2dab38bef Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Fri, 4 Dec 2015 11:38:00 +0200 Subject: [PATCH] lib-index: mail_transaction_log_file_map() didn't properly check start_offset If it was too high, it still returned successful mapping. This could have caused an assert-crash later on when the start_offset was actually attempted to be used. --- src/lib-index/mail-transaction-log-file.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/lib-index/mail-transaction-log-file.c b/src/lib-index/mail-transaction-log-file.c index eea8e59a62..1b390c2c20 100644 --- a/src/lib-index/mail-transaction-log-file.c +++ b/src/lib-index/mail-transaction-log-file.c @@ -1681,6 +1681,7 @@ int mail_transaction_log_file_map(struct mail_transaction_log_file *file, uoff_t start_offset, uoff_t end_offset) { struct mail_index *index = file->log->index; + uoff_t map_start_offset = start_offset; size_t size; int ret; @@ -1736,14 +1737,14 @@ int mail_transaction_log_file_map(struct mail_transaction_log_file *file, /* although we could just skip over the unwanted data, we have to sync everything so that modseqs are calculated correctly */ - start_offset = file->sync_offset; + map_start_offset = file->sync_offset; } if ((file->log->index->flags & MAIL_INDEX_OPEN_FLAG_MMAP_DISABLE) == 0) - ret = mail_transaction_log_file_map_mmap(file, start_offset); + ret = mail_transaction_log_file_map_mmap(file, map_start_offset); else { mail_transaction_log_file_munmap(file); - ret = mail_transaction_log_file_read(file, start_offset, FALSE); + ret = mail_transaction_log_file_read(file, map_start_offset, FALSE); } i_assert(file->buffer == NULL || file->mmap_base != NULL || -- 2.47.3