dovecot-2.2: imap: Fixed fetching partial ranges from non-BODY[]
dovecot at dovecot.org
dovecot at dovecot.org
Sun Aug 12 02:08:36 EEST 2012
details: http://hg.dovecot.org/dovecot-2.2/rev/f4de7ed984b3
changeset: 14868:f4de7ed984b3
user: Timo Sirainen <tss at iki.fi>
date: Sun Aug 12 02:08:30 2012 +0300
description:
imap: Fixed fetching partial ranges from non-BODY[]
diffstat:
src/lib-imap-storage/imap-msgpart.c | 11 ++++++-----
1 files changed, 6 insertions(+), 5 deletions(-)
diffs (45 lines):
diff -r a69d858948ca -r f4de7ed984b3 src/lib-imap-storage/imap-msgpart.c
--- a/src/lib-imap-storage/imap-msgpart.c Sun Aug 12 01:38:51 2012 +0300
+++ b/src/lib-imap-storage/imap-msgpart.c Sun Aug 12 02:08:30 2012 +0300
@@ -362,7 +362,7 @@
static void
skip_using_parts(struct mail *mail, struct istream *input,
- uoff_t *virtual_skip)
+ uoff_t physical_start, uoff_t *virtual_skip)
{
enum mail_lookup_abort old_lookup_abort;
struct message_part *parts, *part;
@@ -382,14 +382,15 @@
/* skip header */
vpos += part->header_size.virtual_size;
*virtual_skip -= part->header_size.virtual_size;
- i_stream_seek(input, part->physical_pos +
+ i_stream_seek(input, physical_start + part->physical_pos +
part->header_size.physical_size);
if (vpos + part->body_size.virtual_size <= *virtual_skip) {
/* skip body */
vpos += part->body_size.virtual_size;
*virtual_skip -= part->body_size.virtual_size;
- i_stream_seek(input, part->physical_pos +
+ i_stream_seek(input, physical_start +
+ part->physical_pos +
part->header_size.physical_size +
part->body_size.physical_size);
part = part->next;
@@ -419,12 +420,12 @@
cache->physical_start == physical_start &&
cache->virtual_pos < virtual_skip) {
/* use cache */
- i_stream_seek(input, cache->physical_pos);
+ i_stream_seek(input, physical_start + cache->physical_pos);
virtual_skip -= cache->virtual_pos;
} else {
/* can't use cache, but maybe we can skip faster using the
message parts. */
- skip_using_parts(mail, input, &virtual_skip);
+ skip_using_parts(mail, input, physical_start, &virtual_skip);
}
crlf_input = i_stream_create_crlf(input);
i_stream_unref(&input);
More information about the dovecot-cvs
mailing list