]> git.kaiwu.me - nginx.git/commitdiff
Referer module: fixed regex matching against HTTPS referers.
authorSergey Kandaurov <pluknet@nginx.com>
Tue, 13 Aug 2013 13:47:04 +0000 (17:47 +0400)
committerSergey Kandaurov <pluknet@nginx.com>
Tue, 13 Aug 2013 13:47:04 +0000 (17:47 +0400)
When matching a compiled regex against value in the "Referer" header field,
the length was calculated incorrectly for strings that start from "https://".
This might cause matching to fail for regexes with end-of-line anchors.

Patch by Liangbin Li.

src/http/modules/ngx_http_referer_module.c

index d18b8b9d8c4bc91355477151e11225eb696abc2f..85b75ab3d8792dadd6a00709976cf545345a2f2f 100644 (file)
@@ -147,10 +147,12 @@ ngx_http_referer_variable(ngx_http_request_t *r, ngx_http_variable_value_t *v,
 
         if (ngx_strncasecmp(ref, (u_char *) "http://", 7) == 0) {
             ref += 7;
+            len -= 7;
             goto valid_scheme;
 
         } else if (ngx_strncasecmp(ref, (u_char *) "https://", 8) == 0) {
             ref += 8;
+            len -= 8;
             goto valid_scheme;
         }
     }
@@ -191,7 +193,7 @@ valid_scheme:
         ngx_int_t  rc;
         ngx_str_t  referer;
 
-        referer.len = len - 7;
+        referer.len = len;
         referer.data = ref;
 
         rc = ngx_regex_exec_array(rlcf->regex, &referer, r->connection->log);