Mercurial > dovecot > core-2.2
changeset 19234:44dd7e81a38b
lib-http: Disconnection from HTTP server could have caused accessing already freed memory.
Freeing a request could have freed the connection.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 28 Sep 2015 13:51:49 +0300 |
parents | 14f670053196 |
children | 77486e114423 |
files | src/lib-http/http-client-connection.c |
diffstat | 1 files changed, 7 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-http/http-client-connection.c Mon Sep 28 12:33:33 2015 +0300 +++ b/src/lib-http/http-client-connection.c Mon Sep 28 13:51:49 2015 +0300 @@ -487,7 +487,7 @@ struct http_client_request *req, struct http_response *response) { struct istream *payload; - bool retrying; + bool retrying, ret; i_assert(!conn->in_req_callback); i_assert(conn->incoming_payload == NULL); @@ -541,6 +541,7 @@ return TRUE; } + http_client_connection_ref(conn); if (response->payload != NULL) { req->state = HTTP_REQUEST_STATE_PAYLOAD_IN; payload = response->payload; @@ -563,10 +564,12 @@ if (conn->incoming_payload == NULL) { i_assert(conn->conn.io != NULL || conn->peer->addr.type == HTTP_CLIENT_PEER_ADDR_RAW); - return TRUE; + ret = TRUE; + } else { + ret = FALSE; } - - return FALSE; + http_client_connection_unref(&conn); + return ret; } static void http_client_connection_input(struct connection *_conn)