dovecot-2.2: lib-http server: Require handle_request() to either...

dovecot at dovecot.org dovecot at dovecot.org
Tue Aug 5 15:45:37 UTC 2014


details:   http://hg.dovecot.org/dovecot-2.2/rev/6785b41831d3
changeset: 17681:6785b41831d3
user:      Timo Sirainen <tss at iki.fi>
date:      Tue Aug 05 17:43:31 2014 +0200
description:
lib-http server: Require handle_request() to either send a response or reference the request.
This should make it more difficult to accidentally forget to send a
response and cause a hang.

Currently this assert-crashes, although it would have been possible to make
it return some internal error instead also.

diffstat:

 src/lib-http/http-server-connection.c |  5 +++++
 src/lib-http/http-server.h            |  4 ++++
 2 files changed, 9 insertions(+), 0 deletions(-)

diffs (30 lines):

diff -r beaee1a2ad61 -r 6785b41831d3 src/lib-http/http-server-connection.c
--- a/src/lib-http/http-server-connection.c	Tue Aug 05 17:37:25 2014 +0200
+++ b/src/lib-http/http-server-connection.c	Tue Aug 05 17:43:31 2014 +0200
@@ -259,7 +259,12 @@
 			http_server_request_fail(req, 505, "Not Implemented");
 			return;
 		} else {
+			unsigned int old_refcount = req->refcount;
+
 			conn->callbacks->handle_request(conn->context, req);
+			i_assert((req->response != NULL &&
+				  req->response->submitted) ||
+				 req->refcount > old_refcount);
 		}
 	}
 }
diff -r beaee1a2ad61 -r 6785b41831d3 src/lib-http/http-server.h
--- a/src/lib-http/http-server.h	Tue Aug 05 17:37:25 2014 +0200
+++ b/src/lib-http/http-server.h	Tue Aug 05 17:43:31 2014 +0200
@@ -38,6 +38,10 @@
 };
 
 struct http_server_callbacks {
+	/* Reference the server request. Before returning you must either send
+	   a response to the request or reference the request with
+	   http_server_request_ref() and unreference it later after sending
+	   the response. */
 	void (*handle_request)(void *context, struct http_server_request *req);
 	void (*handle_connect_request)(void *context,
 		struct http_server_request *req, struct http_url *target);


More information about the dovecot-cvs mailing list