diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/http/modules/ngx_http_map_module.c | 5 | ||||
-rw-r--r-- | src/http/ngx_http_variables.c | 28 | ||||
-rw-r--r-- | src/http/ngx_http_variables.h | 2 |
3 files changed, 24 insertions, 11 deletions
diff --git a/src/http/modules/ngx_http_map_module.c b/src/http/modules/ngx_http_map_module.c index 5aa23eba3..8ca3fa314 100644 --- a/src/http/modules/ngx_http_map_module.c +++ b/src/http/modules/ngx_http_map_module.c @@ -111,7 +111,6 @@ ngx_http_map_variable(ngx_http_request_t *r, ngx_http_variable_value_t *v, size_t len; ngx_str_t val; - ngx_uint_t key; ngx_http_variable_value_t *value; ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, @@ -127,9 +126,7 @@ ngx_http_map_variable(ngx_http_request_t *r, ngx_http_variable_value_t *v, len--; } - key = ngx_hash_strlow(val.data, val.data, len); - - value = ngx_http_map_find(r, &map->map, key, val.data, len, &val); + value = ngx_http_map_find(r, &map->map, &val); if (value == NULL) { value = map->default_value; diff --git a/src/http/ngx_http_variables.c b/src/http/ngx_http_variables.c index 3946e3867..4afd88405 100644 --- a/src/http/ngx_http_variables.c +++ b/src/http/ngx_http_variables.c @@ -1661,14 +1661,30 @@ ngx_http_variable_pid(ngx_http_request_t *r, void * -ngx_http_map_find(ngx_http_request_t *r, ngx_http_map_t *map, ngx_uint_t key, - u_char *text, size_t len, ngx_str_t *match) +ngx_http_map_find(ngx_http_request_t *r, ngx_http_map_t *map, ngx_str_t *match) { - void *p; + void *value; + u_char *low; + size_t len; + ngx_uint_t key; - p = ngx_hash_find_combined(&map->hash, key, text, len); - if (p) { - return p; + len = match->len; + + if (len) { + low = ngx_pnalloc(r->pool, len); + if (low == NULL) { + return NULL; + } + + } else { + low = NULL; + } + + key = ngx_hash_strlow(low, match->data, len); + + value = ngx_hash_find_combined(&map->hash, key, low, len); + if (value) { + return value; } #if (NGX_PCRE) diff --git a/src/http/ngx_http_variables.h b/src/http/ngx_http_variables.h index 8e7263646..b0114e300 100644 --- a/src/http/ngx_http_variables.h +++ b/src/http/ngx_http_variables.h @@ -100,7 +100,7 @@ typedef struct { void *ngx_http_map_find(ngx_http_request_t *r, ngx_http_map_t *map, - ngx_uint_t key, u_char *text, size_t len, ngx_str_t *match); + ngx_str_t *match); ngx_int_t ngx_http_variables_add_core_vars(ngx_conf_t *cf); |