From 0ea4bc726cfb233f5781af2ed91eb785c8f1f9a5 Mon Sep 17 00:00:00 2001 From: frosty Date: Tue, 31 Mar 2026 05:22:42 +0300 Subject: fix: make check for X-Forwarded-For case insensitive in RateLimit.c --- src/Limiter/RateLimit.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/Limiter/RateLimit.c b/src/Limiter/RateLimit.c index 3c6bbff..d6a59c9 100644 --- a/src/Limiter/RateLimit.c +++ b/src/Limiter/RateLimit.c @@ -31,6 +31,23 @@ static int is_blank_char(char c) { return c == ' ' || c == '\t' || c == '\r' || c == '\n'; } +static const char *str_case_str(const char *haystack, const char *needle) { + size_t nlen = strlen(needle); + for (; *haystack; haystack++) { + if (tolower((unsigned char)*haystack) == tolower((unsigned char)*needle)) { + size_t i; + for (i = 1; i < nlen; i++) { + if (tolower((unsigned char)haystack[i]) != + tolower((unsigned char)needle[i])) + break; + } + if (i == nlen) + return haystack; + } + } + return NULL; +} + static void trim_copy(char *dest, size_t dest_size, const char *src, size_t src_len) { while (src_len > 0 && is_blank_char(*src)) { @@ -53,7 +70,7 @@ static void trim_copy(char *dest, size_t dest_size, const char *src, } static void get_client_key(char *client_key, size_t client_key_size) { - const char *header = strstr(current_request_buffer, "X-Forwarded-For:"); + const char *header = str_case_str(current_request_buffer, "x-forwarded-for:"); if (!header) return; -- cgit v1.2.3