From 254fbc81b43eb8de42c7723a3f129ac529ebc9f4 Mon Sep 17 00:00:00 2001 From: Azat Khuzhin Date: Mon, 22 Oct 2018 23:56:19 +0300 Subject: http: allow trailing spaces (and only them) in request-line (like nginx) --- http.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'http.c') 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: -- cgit v1.2.1