From ea2c9ff03053b7d255984d6bbcb3a48c052d1e4d Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Fri, 25 Apr 2014 19:01:09 +0300 Subject: [PATCH] lib-http: Better error handling fix for payload read/write failures --- src/lib-http/http-client-request.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) 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, -- 2.47.3