Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nginx/nginx.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxim Dounin <mdounin@mdounin.ru>2013-09-23 19:37:06 +0400
committerMaxim Dounin <mdounin@mdounin.ru>2013-09-23 19:37:06 +0400
commitd2ef70e97acbda42204d589d0886be88314016c2 (patch)
tree85fa5a75524703bfc0d22bda12c255aa95afef6b /src/http/ngx_http.c
parentf52a2c7585092b980866fde5d1a0569fe2bf43b2 (diff)
Caseless location tree construction (ticket #90).
Location tree was always constructed using case-sensitive comparison, even on case-insensitive systems. This resulted in incorrect operation if uppercase letters were used in location directives. Notably, the following config: location /a { ... } location /B { ... } failed to properly map requests to "/B" into "location /B".
Diffstat (limited to 'src/http/ngx_http.c')
-rw-r--r--src/http/ngx_http.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/http/ngx_http.c b/src/http/ngx_http.c
index 987ae54df..91bb04f55 100644
--- a/src/http/ngx_http.c
+++ b/src/http/ngx_http.c
@@ -949,7 +949,8 @@ ngx_http_cmp_locations(const ngx_queue_t *one, const ngx_queue_t *two)
#endif
- rc = ngx_strcmp(first->name.data, second->name.data);
+ rc = ngx_filename_cmp(first->name.data, second->name.data,
+ ngx_min(first->name.len, second->name.len) + 1);
if (rc == 0 && !first->exact_match && second->exact_match) {
/* an exact match must be before the same inclusive one */
@@ -975,8 +976,10 @@ ngx_http_join_exact_locations(ngx_conf_t *cf, ngx_queue_t *locations)
lq = (ngx_http_location_queue_t *) q;
lx = (ngx_http_location_queue_t *) x;
- if (ngx_strcmp(lq->name->data, lx->name->data) == 0) {
-
+ if (lq->name->len == lx->name->len
+ && ngx_filename_cmp(lq->name->data, lx->name->data, lx->name->len)
+ == 0)
+ {
if ((lq->exact && lx->exact) || (lq->inclusive && lx->inclusive)) {
ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
"duplicate location \"%V\" in %s:%ui",
@@ -1028,7 +1031,7 @@ ngx_http_create_locations_list(ngx_queue_t *locations, ngx_queue_t *q)
lx = (ngx_http_location_queue_t *) x;
if (len > lx->name->len
- || (ngx_strncmp(name, lx->name->data, len) != 0))
+ || ngx_filename_cmp(name, lx->name->data, len) != 0)
{
break;
}