aboutsummaryrefslogtreecommitdiff
path: root/src/http/ngx_http_variables.c
diff options
context:
space:
mode:
authorMaxim Dounin <mdounin@mdounin.ru>2014-08-27 21:38:04 +0400
committerMaxim Dounin <mdounin@mdounin.ru>2014-08-27 21:38:04 +0400
commit8cf734c7b4f2573c5220b5a6b2c8cb24bb459c04 (patch)
tree12c5a5fdaa358736d75979360d6d6e269a11a243 /src/http/ngx_http_variables.c
parentdbcb16ff685d26d0e941f735ffa507c48467df10 (diff)
downloadnginx-8cf734c7b4f2573c5220b5a6b2c8cb24bb459c04.tar.gz
nginx-8cf734c7b4f2573c5220b5a6b2c8cb24bb459c04.zip
Variables: fixed non-indexed access of prefix vars (ticket #600).
Previously, a configuration like location / { ssi on; ssi_types *; set $http_foo "bar"; return 200 '<!--#echo var="http_foo" -->\n'; } resulted in NULL pointer dereference in ngx_http_get_variable() as the variable was explicitly added to the variables hash, but its get_handler wasn't properly set in the hash. Fix is to make sure that get_handler is properly set by ngx_http_variables_init_vars().
Diffstat (limited to 'src/http/ngx_http_variables.c')
-rw-r--r--src/http/ngx_http_variables.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/http/ngx_http_variables.c b/src/http/ngx_http_variables.c
index 1b61c39d4..738f2237a 100644
--- a/src/http/ngx_http_variables.c
+++ b/src/http/ngx_http_variables.c
@@ -2511,8 +2511,7 @@ ngx_http_variables_init_vars(ngx_conf_t *cf)
av = key[n].value;
- if (av->get_handler
- && v[i].name.len == key[n].key.len
+ if (v[i].name.len == key[n].key.len
&& ngx_strncmp(v[i].name.data, key[n].key.data, v[i].name.len)
== 0)
{
@@ -2524,6 +2523,10 @@ ngx_http_variables_init_vars(ngx_conf_t *cf)
av->index = i;
+ if (av->get_handler == NULL) {
+ break;
+ }
+
goto next;
}
}