]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-index: mail_transaction_log_file_map() didn't properly check start_offset
authorTimo Sirainen <tss@iki.fi>
Fri, 4 Dec 2015 09:38:00 +0000 (11:38 +0200)
committerTimo Sirainen <tss@iki.fi>
Fri, 4 Dec 2015 09:38:00 +0000 (11:38 +0200)
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

index eea8e59a62856d92454571d40c711dc1c5a12386..1b390c2c206fd7a2527b4aa48791cfb4e414d541 100644 (file)
@@ -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 ||