From: Timo Sirainen Date: Thu, 11 Jul 2013 07:19:43 +0000 (+0300) Subject: lib-http: Minor fix/cleanup to detecting stream errors when skipping payload. X-Git-Tag: 2.2.5~58 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=db37e13db93ec74da13e8f78c8e501763dfafe78;p=thirdparty%2Fdovecot%2Fcore.git lib-http: Minor fix/cleanup to detecting stream errors when skipping payload. --- 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