aboutsummaryrefslogtreecommitdiff
path: root/server_http.c
diff options
context:
space:
mode:
Diffstat (limited to 'server_http.c')
-rw-r--r--server_http.c41
1 files changed, 17 insertions, 24 deletions
diff --git a/server_http.c b/server_http.c
index d83c7b4..5568840 100644
--- a/server_http.c
+++ b/server_http.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: server_http.c,v 1.59 2015/01/04 22:23:58 chrisz Exp $ */
+/* $OpenBSD: server_http.c,v 1.61 2015/01/06 13:48:15 reyk Exp $ */
/*
* Copyright (c) 2006 - 2014 Reyk Floeter <reyk@openbsd.org>
@@ -184,17 +184,14 @@ server_read_http(struct bufferevent *bev, void *arg)
value = strchr(key, ':');
if (value == NULL) {
if (clt->clt_line == 1) {
- free(line);
server_abort_http(clt, 400, "malformed");
- return;
+ goto abort;
}
/* Append line to the last header, if present */
if (kv_extend(&desc->http_headers,
- desc->http_lastheader, line) == NULL) {
- free(line);
+ desc->http_lastheader, line) == NULL)
goto fail;
- }
free(line);
continue;
@@ -214,22 +211,22 @@ server_read_http(struct bufferevent *bev, void *arg)
*/
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, 400, "malformed");
+ goto abort;
+ }
/*
* Decode request path and query
*/
desc->http_path = strdup(value);
- if (desc->http_path == NULL) {
- free(line);
+ if (desc->http_path == NULL)
goto fail;
- }
+
desc->http_version = strchr(desc->http_path, ' ');
- if (desc->http_version == NULL) {
- free(line);
+ if (desc->http_version == NULL)
goto fail;
- }
+
*desc->http_version++ = '\0';
desc->http_query = strchr(desc->http_path, '?');
if (desc->http_query != NULL)
@@ -240,16 +237,14 @@ server_read_http(struct bufferevent *bev, void *arg)
* be changed independently by the filters later.
*/
if ((desc->http_version =
- strdup(desc->http_version)) == NULL) {
- free(line);
+ strdup(desc->http_version)) == NULL)
goto fail;
- }
+
if (desc->http_query != NULL &&
(desc->http_query =
- strdup(desc->http_query)) == NULL) {
- free(line);
+ strdup(desc->http_query)) == NULL)
goto fail;
- }
+
} else if (desc->http_method != HTTP_METHOD_NONE &&
strcasecmp("Content-Length", key) == 0) {
if (desc->http_method == HTTP_METHOD_TRACE ||
@@ -288,10 +283,9 @@ server_read_http(struct bufferevent *bev, void *arg)
if (clt->clt_line != 1) {
if ((hdr = kv_add(&desc->http_headers, key,
- value)) == NULL) {
- free(line);
+ value)) == NULL)
goto fail;
- }
+
desc->http_lastheader = hdr;
}
@@ -379,7 +373,6 @@ server_read_http(struct bufferevent *bev, void *arg)
return;
fail:
server_abort_http(clt, 500, strerror(errno));
- return;
abort:
free(line);
}