details: http://hg.nginx.org/nginx/rev/6c99c5f00fc9 branches: changeset: 5815:6c99c5f00fc9 user: Maxim Dounin <mdou...@mdounin.ru> date: Wed Aug 27 21:38:04 2014 +0400 description: 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: src/http/ngx_http_variables.c | 7 +++++-- 1 files changed, 5 insertions(+), 2 deletions(-) diffs (24 lines): diff --git a/src/http/ngx_http_variables.c b/src/http/ngx_http_variables.c --- 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 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 av->index = i; + if (av->get_handler == NULL) { + break; + } + goto next; } } _______________________________________________ nginx-devel mailing list nginx-devel@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-devel