From 62d66201c9db304b595cb0010189486ea131f02b Mon Sep 17 00:00:00 2001
From: Sergey Lyubka <valenok@gmail.com>
Date: Thu, 25 Jul 2013 07:07:25 +0100
Subject: [PATCH] make match_prefix() case-insensitive

---
 mongoose.c       | 3 ++-
 test/test.pl     | 2 +-
 test/unit_test.c | 3 ++-
 3 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/mongoose.c b/mongoose.c
index e27ba3747..7d6e0ed53 100644
--- a/mongoose.c
+++ b/mongoose.c
@@ -874,6 +874,7 @@ static const char *next_option(const char *list, struct vec *val,
   return list;
 }
 
+// Perform case-insensitive match of string against pattern
 static int match_prefix(const char *pattern, int pattern_len, const char *str) {
   const char *or_str;
   int i, j, len, res;
@@ -906,7 +907,7 @@ static int match_prefix(const char *pattern, int pattern_len, const char *str) {
         res = match_prefix(pattern + i, pattern_len - i, str + j + len);
       } while (res == -1 && len-- > 0);
       return res == -1 ? -1 : j + res + len;
-    } else if (pattern[i] != str[j]) {
+    } else if (lowercase(&pattern[i]) != lowercase(&str[j])) {
       return -1;
     }
   }
diff --git a/test/test.pl b/test/test.pl
index 13370a947..5e76570f1 100644
--- a/test/test.pl
+++ b/test/test.pl
@@ -171,7 +171,7 @@ my $cmd = "$mongoose_exe ".
   '-put_delete_auth_file test/passfile ' .
   '-access_control_list -0.0.0.0/0,+127.0.0.1 ' .
   "-document_root $root ".
-  "-hide_files_patterns **exploit.pl ".
+  "-hide_files_patterns **exploit.PL ".
   "-enable_keep_alive yes ".
   "-url_rewrite_patterns /aiased=/etc/,/ta=$test_dir";
 $cmd .= ' -cgi_interpreter perl' if on_windows();
diff --git a/test/unit_test.c b/test/unit_test.c
index 1ffd0debd..40b8efa01 100644
--- a/test/unit_test.c
+++ b/test/unit_test.c
@@ -154,7 +154,8 @@ static void test_match_prefix(void) {
   ASSERT(match_prefix("*", 1, "/hello/") == 0);
   ASSERT(match_prefix("**.a$|**.b$", 11, "/a/b.b/") == -1);
   ASSERT(match_prefix("**.a$|**.b$", 11, "/a/b.b") == 6);
-  ASSERT(match_prefix("**.a$|**.b$", 11, "/a/b.a") == 6);
+  ASSERT(match_prefix("**.a$|**.b$", 11, "/a/B.A") == 6);
+  ASSERT(match_prefix("**o$", 4, "HELLO") == 5);
 }
 
 static void test_remove_double_dots() {
-- 
GitLab