aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/http/modules/ngx_http_map_module.c5
-rw-r--r--src/http/ngx_http_variables.c28
-rw-r--r--src/http/ngx_http_variables.h2
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);