changeset 6654:ac0e7f713d70 HEAD

Infinite looping fixes
author Timo Sirainen <tss@iki.fi>
date Mon, 29 Oct 2007 22:59:49 +0200
parents 947a8a032371
children 9ffa528c257c
files src/lib-mail/message-parser.c
diffstat 1 files changed, 10 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-mail/message-parser.c	Sun Oct 28 21:29:19 2007 +0200
+++ b/src/lib-mail/message-parser.c	Mon Oct 29 22:59:49 2007 +0200
@@ -443,6 +443,7 @@
 {
 	struct message_part *part = ctx->part;
 	struct message_header_line *hdr;
+	size_t size;
 	int ret;
 
 	if (ctx->skip > 0) {
@@ -451,8 +452,11 @@
 	}
 
 	ret = message_parse_header_next(ctx->hdr_parser_ctx, &hdr);
-	if (ret == 0 || (ret < 0 && ctx->input->stream_errno != 0))
+	if (ret == 0 || (ret < 0 && ctx->input->stream_errno != 0)) {
+		(void)i_stream_get_data(ctx->input, &size);
+		ctx->want_count = size + 1;
 		return ret;
+	}
 
 	if (hdr != NULL) {
 		if (hdr->eoh)
@@ -628,11 +632,15 @@
 				       struct message_block *block_r)
 {
 	struct message_header_line *hdr;
+	size_t size;
 	int ret;
 
 	ret = message_parse_header_next(ctx->hdr_parser_ctx, &hdr);
-	if (ret == 0 || (ret < 0 && ctx->input->stream_errno != 0))
+	if (ret == 0 || (ret < 0 && ctx->input->stream_errno != 0)) {
+		(void)i_stream_get_data(ctx->input, &size);
+		ctx->want_count = size + 1;
 		return ret;
+	}
 
 	if (hdr != NULL) {
 		block_r->hdr = hdr;