From 0ec1a141f1710d7afb56d186c4d40b475d38e1a6 Mon Sep 17 00:00:00 2001 From: Alexander Alashkin <alexander.alashkin@cesanta.com> Date: Fri, 23 Sep 2016 11:14:41 +0100 Subject: [PATCH] Fix mg_http_parse_headers PUBLISHED_FROM=7e88f60283d499732e8df663814067849d9567bb --- mongoose.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/mongoose.c b/mongoose.c index d32ef95e4..d4167f8f9 100644 --- a/mongoose.c +++ b/mongoose.c @@ -4045,8 +4045,8 @@ static int mg_http_get_request_len(const char *s, int buf_len) { static const char *mg_http_parse_headers(const char *s, const char *end, int len, struct http_message *req) { - int i; - for (i = 0; i < (int) ARRAY_SIZE(req->header_names) - 1; i++) { + int i = 0; + while (i < (int) ARRAY_SIZE(req->header_names) - 1) { struct mg_str *k = &req->header_names[i], *v = &req->header_values[i]; s = mg_skip(s, end, ": ", k); @@ -4056,6 +4056,15 @@ static const char *mg_http_parse_headers(const char *s, const char *end, v->len--; /* Trim trailing spaces in header value */ } + /* + * If header value is empty - skip it and go to next (if any). + * NOTE: Do not add it to headers_values because such addition changes API + * behaviour + */ + if (k->len != 0 && v->len == 0) { + continue; + } + if (k->len == 0 || v->len == 0) { k->p = v->p = NULL; k->len = v->len = 0; @@ -4066,6 +4075,8 @@ static const char *mg_http_parse_headers(const char *s, const char *end, req->body.len = (size_t) to64(v->p); req->message.len = len + req->body.len; } + + i++; } return s; -- GitLab