From: Stephan Bosch Date: Wed, 25 Jan 2023 04:18:10 +0000 (+0100) Subject: lib-http: client - Don't unlock connection output before request is fully sent X-Git-Tag: 2.4.0~3032 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=987fab8f4e143ab851c3318c8614e81bb0f2b360;p=thirdparty%2Fdovecot%2Fcore.git lib-http: client - Don't unlock connection output before request is fully sent This could happen at least when the payload is empty and the final LF was buffered. --- diff --git a/src/lib-http/http-client-request.c b/src/lib-http/http-client-request.c index 5ec4a8ef68..7e578a6186 100644 --- a/src/lib-http/http-client-request.c +++ b/src/lib-http/http-client-request.c @@ -1073,6 +1073,13 @@ http_client_request_finish_payload_out(struct http_client_request *req) o_stream_unref(&req->payload_output); req->payload_output = NULL; } + if (conn->conn.output != NULL && + o_stream_get_buffer_used_size(conn->conn.output) > 0) { + e_debug(req->event, + "Not quite finished sending request"); + conn->output_locked = TRUE; + return 0; + } i_assert(req->request_offset < conn->conn.output->offset); req->bytes_out = conn->conn.output->offset - req->request_offset;