Mercurial > dovecot > original-hg > dovecot-1.2
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;