Hi,

If a client sends a bogus request with an unknown method or no http version
string, httpd currently grabs the last error with strerror(), this patch causes
it to call server_abort_http() directly with a more explicit error message:



Index: server_http.c
===================================================================
RCS file: /cvs/src/usr.sbin/httpd/server_http.c,v
retrieving revision 1.54
diff -u -p -r1.54 server_http.c
--- server_http.c       25 Oct 2014 03:23:49 -0000      1.54
+++ server_http.c       28 Nov 2014 15:37:51 -0000
@@ -216,8 +216,10 @@ server_read_http(struct bufferevent *bev
                 */
                if (clt->clt_line == 1) {
                        if ((desc->http_method = server_httpmethod_byname(key))
-                           == HTTP_METHOD_NONE)
-                               goto fail;
+                           == HTTP_METHOD_NONE) {
+                               server_abort_http(clt, 501, "unknown method");
+                               return
+                       }
 
                        /*
                         * Decode request path and query
@@ -230,7 +232,8 @@ server_read_http(struct bufferevent *bev
                        desc->http_version = strchr(desc->http_path, ' ');
                        if (desc->http_version == NULL) {
                                free(line);
-                               goto fail;
+                               server_abort_http(clt, 500, "no http version");
+                               return;
                        }
                        *desc->http_version++ = '\0';
                        desc->http_query = strchr(desc->http_path, '?');

Reply via email to