]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-http: server: Implicitly free a request response structure when a new (failure...
authorStephan Bosch <stephan@rename-it.nl>
Sat, 20 Feb 2016 17:35:12 +0000 (19:35 +0200)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Sat, 20 Feb 2016 17:35:12 +0000 (19:35 +0200)
src/lib-http/http-server-response.c

index 2fa863753fc2ee72cd2824a1c5e0c225fbe9a969..ce8e19d7cd8327516d402cfde9b4a47173cfe67c 100644 (file)
@@ -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);