From: Timo Sirainen Date: Fri, 25 Apr 2014 16:01:09 +0000 (+0300) Subject: lib-http: Better error handling fix for payload read/write failures X-Git-Tag: 2.2.13.rc1~88 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ea2c9ff03053b7d255984d6bbcb3a48c052d1e4d;p=thirdparty%2Fdovecot%2Fcore.git lib-http: Better error handling fix for payload read/write failures --- diff --git a/src/lib-http/http-client-request.c b/src/lib-http/http-client-request.c index a2f8ac4757..0d3444a87a 100644 --- a/src/lib-http/http-client-request.c +++ b/src/lib-http/http-client-request.c @@ -581,20 +581,19 @@ int http_client_request_send_more(struct http_client_request *req, *error_r = t_strdup_printf("read(%s) failed: %s", i_stream_get_name(req->payload_input), i_stream_get_error(req->payload_input)); - ret = -1; + return -1; } else if (output->stream_errno != 0) { /* failed to send request */ errno = output->stream_errno; *error_r = t_strdup_printf("write(%s) failed: %s", o_stream_get_name(output), o_stream_get_error(output)); - ret = -1; - } else { - i_assert(ret >= 0); + return -1; } + i_assert(ret >= 0); - if (ret < 0 || i_stream_is_eof(req->payload_input)) { - if (ret >= 0 && !req->payload_chunked && + if (i_stream_is_eof(req->payload_input)) { + if (!req->payload_chunked && req->payload_input->v_offset - req->payload_offset != req->payload_size) { *error_r = t_strdup_printf("BUG: stream '%s' input size changed: " "%"PRIuUOFF_T"-%"PRIuUOFF_T" != %"PRIuUOFF_T, @@ -622,7 +621,7 @@ int http_client_request_send_more(struct http_client_request *req, conn->io_req_payload = io_add_istream(req->payload_input, http_client_request_payload_input, req); } - return ret < 0 ? -1 : 0; + return 0; } static int http_client_request_send_real(struct http_client_request *req,