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);
 }