From a738f1abfe953da35e15e760cfb005dbeae020cd Mon Sep 17 00:00:00 2001 From: Lorenz Stechauner Date: Tue, 16 Aug 2022 20:04:08 +0200 Subject: [PATCH] Fix http parser bugs --- src/client.c | 2 +- src/lib/http.c | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/client.c b/src/client.c index 2304180..f999054 100644 --- a/src/client.c +++ b/src/client.c @@ -156,7 +156,7 @@ int client_request_handler(sock *client, unsigned long client_num, unsigned int conf = get_host_config(host); if (conf == NULL) { - print("Host unknown, redirecting to default"); + print("Unknown host, redirecting to default"); res.status = http_get_status(307); sprintf(buf0, "https://%s%s", DEFAULT_HOST, req.uri); http_add_header_field(&res.hdr, "Location", buf0); diff --git a/src/lib/http.c b/src/lib/http.c index afbf0ea..defd75f 100644 --- a/src/lib/http.c +++ b/src/lib/http.c @@ -104,7 +104,7 @@ int http_parse_header_field(http_hdr *hdr, const char *buf, const char *end_ptr) print(ERR_STR "Unable to parse header" CLR_STR); return 3; } - long len1 = pos1 - buf - 1; + long len1 = pos1 - buf; pos1++; str_trim_lws(&pos1, &pos2); @@ -235,14 +235,17 @@ int http_get_header_field_num(const http_hdr *hdr, const char *field_name) { int http_get_header_field_num_len(const http_hdr *hdr, const char *field_name, unsigned long len) { char field_name_1[256], field_name_2[256]; memcpy(field_name_1, field_name, len); + field_name_1[len] = 0; http_to_camel_case(field_name_1, HTTP_LOWER); + for (int i = 0; i < hdr->field_num; i++) { strcpy(field_name_2, http_field_get_name(&hdr->fields[i])); http_to_camel_case(field_name_2, HTTP_LOWER); - if (strcmp(field_name_1, field_name_2) == 0) { + + if (strcmp(field_name_1, field_name_2) == 0) return i; - } } + return -1; }