Fix #1376 - handle comma for unquoted header vars

This commit is contained in:
Sergey Lyubka
2021-10-22 14:33:51 +01:00
parent 126d556d6a
commit 054475ddbf
3 changed files with 27 additions and 6 deletions
+5 -3
View File
@@ -173,7 +173,7 @@ struct mg_str *mg_http_get_header(struct mg_http_message *h, const char *name) {
}
static void mg_http_parse_headers(const char *s, const char *end,
struct mg_http_header *h, int max_headers) {
struct mg_http_header *h, int max_headers) {
int i;
for (i = 0; i < max_headers; i++) {
struct mg_str k, v, tmp;
@@ -826,11 +826,13 @@ static struct mg_str stripquotes(struct mg_str s) {
struct mg_str mg_http_get_header_var(struct mg_str s, struct mg_str v) {
size_t i;
for (i = 0; i + v.len + 2 < s.len; i++) {
for (i = 0; v.len > 0 && i + v.len + 2 < s.len; i++) {
if (s.ptr[i + v.len] == '=' && memcmp(&s.ptr[i], v.ptr, v.len) == 0) {
const char *p = &s.ptr[i + v.len + 1], *b = p, *x = &s.ptr[s.len];
int q = p < x && *p == '"' ? 1 : 0;
while (p < x && (q ? p == b || *p != '"' : *p != ';' && *p != ' ')) p++;
while (p < x &&
(q ? p == b || *p != '"' : *p != ';' && *p != ' ' && *p != ','))
p++;
// LOG(LL_INFO, ("[%.*s] [%.*s] [%.*s]", (int) s.len, s.ptr, (int) v.len,
// v.ptr, (int) (p - b), b));
return stripquotes(mg_str_n(b, (size_t) (p - b + q)));