From c0a8031392ccb2cbfafe3eb0a1446fa8d8c5bb46 Mon Sep 17 00:00:00 2001 From: Stephan Bosch Date: Sat, 20 Feb 2016 19:35:12 +0200 Subject: [PATCH] lib-http: server: Implicitly free a request response structure when a new (failure) response is started. --- src/lib-http/http-server-response.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/lib-http/http-server-response.c b/src/lib-http/http-server-response.c index 2fa863753f..ce8e19d7cd 100644 --- a/src/lib-http/http-server-response.c +++ b/src/lib-http/http-server-response.c @@ -49,9 +49,19 @@ http_server_response_create(struct http_server_request *req, { struct http_server_response *resp; - i_assert(req->response == NULL); + if (req->response == NULL) { + resp = req->response = p_new + (req->pool, struct http_server_response, 1); + } else { + /* was already composing a response, but decided to + start a new one (would usually be a failure response) + */ + resp = req->response; + i_assert(!resp->submitted); + http_server_response_free(resp); + memset(resp, 0, sizeof(*resp)); + } - resp = req->response = p_new(req->pool, struct http_server_response, 1); resp->request = req; resp->status = status; resp->reason = p_strdup(req->pool, reason); -- 2.47.3