From e3e458d398f99bf2b441565fc0e6c37e24e5c8d1 Mon Sep 17 00:00:00 2001 From: Reyk Floeter Date: Tue, 6 Jan 2015 15:11:30 +0100 Subject: sync with -current --- config.c | 2 +- parse.y | 2 +- server.c | 2 +- server_http.c | 41 +++++++++++++++++------------------------ 4 files changed, 20 insertions(+), 27 deletions(-) diff --git a/config.c b/config.c index 8fb9b7d..4077d34 100644 --- a/config.c +++ b/config.c @@ -1,4 +1,4 @@ -/* $OpenBSD: config.c,v 1.27 2015/01/03 15:49:18 reyk Exp $ */ +/* $OpenBSD: config.c,v 1.28 2015/01/06 14:07:48 reyk Exp $ */ /* * Copyright (c) 2011 - 2014 Reyk Floeter diff --git a/parse.y b/parse.y index 0586c46..c7a536c 100644 --- a/parse.y +++ b/parse.y @@ -1,4 +1,4 @@ -/* $OpenBSD: parse.y,v 1.48 2015/01/03 16:20:31 reyk Exp $ */ +/* $OpenBSD: parse.y,v 1.51 2015/01/06 14:07:48 reyk Exp $ */ /* * Copyright (c) 2007 - 2014 Reyk Floeter diff --git a/server.c b/server.c index 3b4c0dc..cc237ca 100644 --- a/server.c +++ b/server.c @@ -1,4 +1,4 @@ -/* $OpenBSD: server.c,v 1.49 2014/12/21 00:54:49 guenther Exp $ */ +/* $OpenBSD: server.c,v 1.50 2015/01/06 14:07:48 reyk Exp $ */ /* * Copyright (c) 2006 - 2014 Reyk Floeter 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 @@ -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); } -- cgit v1.2.3-54-g00ecf