Mercurial > dovecot > original-hg > dovecot-1.2
changeset 307:5954f9c2e620 HEAD
BODY / BODYSTRUCTURE generator didn't like if message didn't start from zero
offset in inbuf.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Tue, 24 Sep 2002 10:01:32 +0300 |
parents | 3f9c648d34db |
children | 899d3e189dbf |
files | src/lib-imap/imap-bodystructure.c |
diffstat | 1 files changed, 15 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-imap/imap-bodystructure.c Tue Sep 24 09:55:40 2002 +0300 +++ b/src/lib-imap/imap-bodystructure.c Tue Sep 24 10:01:32 2002 +0300 @@ -171,18 +171,22 @@ t_pop(); } -static void part_parse_headers(MessagePart *part, IOBuffer *inbuf, Pool pool) +static void part_parse_headers(MessagePart *part, IOBuffer *inbuf, + uoff_t start_offset, Pool pool) { while (part != NULL) { /* note that we want to parse the header of all the message parts, multiparts too. */ - i_assert(part->physical_pos >= inbuf->offset); - io_buffer_skip(inbuf, part->physical_pos - inbuf->offset); + i_assert(part->physical_pos >= inbuf->offset - start_offset); + io_buffer_skip(inbuf, part->physical_pos - + (inbuf->offset - start_offset)); message_parse_header(part, inbuf, NULL, parse_header, pool); - if (part->children != NULL) - part_parse_headers(part->children, inbuf, pool); + if (part->children != NULL) { + part_parse_headers(part->children, inbuf, + start_offset, pool); + } part = part->next; } @@ -359,10 +363,14 @@ const char *imap_part_get_bodystructure(Pool pool, MessagePart **part, IOBuffer *inbuf, int extended) { + uoff_t start_offset; + if (*part == NULL) *part = message_parse(pool, inbuf, parse_header, pool); - else - part_parse_headers(*part, inbuf, pool); + else { + start_offset = inbuf->offset; + part_parse_headers(*part, inbuf, start_offset, pool); + } return part_get_bodystructure(*part, extended); }