summaryrefslogtreecommitdiff
path: root/http.c
diff options
context:
space:
mode:
authorAzat Khuzhin <a3at.mail@gmail.com>2018-10-22 23:56:19 +0300
committerAzat Khuzhin <a3at.mail@gmail.com>2018-10-22 23:56:31 +0300
commit254fbc81b43eb8de42c7723a3f129ac529ebc9f4 (patch)
tree6656595dbe0570c7921efce57721e44b7b439e0b /http.c
parent6cf659b0bd9e7b3354facd37d739341afbe7180f (diff)
downloadlibevent-254fbc81b43eb8de42c7723a3f129ac529ebc9f4.tar.gz
http: allow trailing spaces (and only them) in request-line (like nginx)
Diffstat (limited to 'http.c')
-rw-r--r--http.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/http.c b/http.c
index b6bbc699..9a641da8 100644
--- a/http.c
+++ b/http.c
@@ -1686,8 +1686,9 @@ evhttp_parse_response_line(struct evhttp_request *req, char *line)
/* Parse the first line of a HTTP request */
static int
-evhttp_parse_request_line(struct evhttp_request *req, char *line)
+evhttp_parse_request_line(struct evhttp_request *req, char *line, size_t len)
{
+ char *eos = line + len;
char *method;
char *uri;
char *version;
@@ -1696,6 +1697,12 @@ evhttp_parse_request_line(struct evhttp_request *req, char *line)
size_t method_len;
enum evhttp_cmd_type type;
+ while (eos > line && *(eos-1) == ' ') {
+ *(eos-1) = '\0';
+ --eos;
+ --len;
+ }
+
/* Parse the request line */
method = strsep(&line, " ");
if (line == NULL)
@@ -2009,7 +2016,7 @@ evhttp_parse_firstline_(struct evhttp_request *req, struct evbuffer *buffer)
switch (req->kind) {
case EVHTTP_REQUEST:
- if (evhttp_parse_request_line(req, line) == -1)
+ if (evhttp_parse_request_line(req, line, len) == -1)
status = DATA_CORRUPTED;
break;
case EVHTTP_RESPONSE: