From db37e13db93ec74da13e8f78c8e501763dfafe78 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Thu, 11 Jul 2013 10:19:43 +0300 Subject: [PATCH] lib-http: Minor fix/cleanup to detecting stream errors when skipping payload. --- src/lib-http/http-response-parser.c | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/src/lib-http/http-response-parser.c b/src/lib-http/http-response-parser.c index 7e9c469ef2..76fdb70ef5 100644 --- a/src/lib-http/http-response-parser.c +++ b/src/lib-http/http-response-parser.c @@ -343,25 +343,19 @@ int http_response_parse_next(struct http_response_parser *parser, before we continue. */ if (parser->payload != NULL) { struct istream *payload = parser->payload; + const unsigned char *data; + size_t size; i_assert(parser->state == HTTP_RESPONSE_PARSE_STATE_INIT); - if (i_stream_have_bytes_left(payload)) { - do { - i_stream_skip(payload, i_stream_get_data_size(payload)); - } while ((ret=i_stream_read(payload)) > 0); - if (ret == 0) - return 0; - if (ret < 0 && !payload->eof) { + while ((ret = i_stream_read_data(payload, &data, &size, 0)) > 0) + i_stream_skip(payload, size); + if (ret == 0 || payload->stream_errno != 0) { + if (ret < 0) *error_r = "Stream error while skipping payload"; - return -1; - } - } - - if (payload->eof) { - i_stream_unref(&parser->payload); - parser->payload = NULL; + return ret; } + i_stream_unref(&parser->payload); } /* HTTP-message = start-line -- 2.47.3