diff options
| author | Valentin Bartenev <vbart@nginx.com> | 2013-08-06 19:58:40 +0400 |
|---|---|---|
| committer | Valentin Bartenev <vbart@nginx.com> | 2013-08-06 19:58:40 +0400 |
| commit | 3c5bd34771be032ef14e59f934058b3dce93588b (patch) | |
| tree | a71e5b734bca4200959241d928410ba98f48070b /src/http | |
| parent | 1b7bc342186ff0768c06419a134032adb2a536f8 (diff) | |
| download | nginx-3c5bd34771be032ef14e59f934058b3dce93588b.tar.gz nginx-3c5bd34771be032ef14e59f934058b3dce93588b.tar.bz2 | |
Fixed memory leaks in the root and auth_basic_user_file directives.
If a relative path is set by variables, then the ngx_conf_full_name()
function was called while processing requests, which causes allocations
from the cycle pool.
A new function that takes pool as an argument was introduced.
Diffstat (limited to '')
| -rw-r--r-- | src/http/ngx_http_core_module.c | 4 | ||||
| -rw-r--r-- | src/http/ngx_http_script.c | 6 | ||||
| -rw-r--r-- | src/http/ngx_http_variables.c | 8 |
3 files changed, 14 insertions, 4 deletions
diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c index 12a82eb9c..ffe7fb4fe 100644 --- a/src/http/ngx_http_core_module.c +++ b/src/http/ngx_http_core_module.c @@ -2016,7 +2016,9 @@ ngx_http_map_uri_to_path(ngx_http_request_t *r, ngx_str_t *path, return NULL; } - if (ngx_conf_full_name((ngx_cycle_t *) ngx_cycle, path, 0) != NGX_OK) { + if (ngx_get_full_name(r->pool, (ngx_str_t *) &ngx_cycle->prefix, path) + != NGX_OK) + { return NULL; } diff --git a/src/http/ngx_http_script.c b/src/http/ngx_http_script.c index 54d019589..1da793b8f 100644 --- a/src/http/ngx_http_script.c +++ b/src/http/ngx_http_script.c @@ -1334,7 +1334,11 @@ ngx_http_script_full_name_code(ngx_http_script_engine_t *e) value.data = e->buf.data; value.len = e->pos - e->buf.data; - if (ngx_conf_full_name((ngx_cycle_t *) ngx_cycle, &value, code->conf_prefix) + if (ngx_get_full_name(e->request->pool, + code->conf_prefix + ? (ngx_str_t *) &ngx_cycle->conf_prefix: + (ngx_str_t *) &ngx_cycle->prefix, + &value) != NGX_OK) { e->ip = ngx_http_script_exit; diff --git a/src/http/ngx_http_variables.c b/src/http/ngx_http_variables.c index 0b1a33430..b4f8eeba0 100644 --- a/src/http/ngx_http_variables.c +++ b/src/http/ngx_http_variables.c @@ -1374,7 +1374,9 @@ ngx_http_variable_document_root(ngx_http_request_t *r, return NGX_ERROR; } - if (ngx_conf_full_name((ngx_cycle_t *) ngx_cycle, &path, 0) != NGX_OK) { + if (ngx_get_full_name(r->pool, (ngx_str_t *) &ngx_cycle->prefix, &path) + != NGX_OK) + { return NGX_ERROR; } @@ -1416,7 +1418,9 @@ ngx_http_variable_realpath_root(ngx_http_request_t *r, path.data[path.len - 1] = '\0'; - if (ngx_conf_full_name((ngx_cycle_t *) ngx_cycle, &path, 0) != NGX_OK) { + if (ngx_get_full_name(r->pool, (ngx_str_t *) &ngx_cycle->prefix, &path) + != NGX_OK) + { return NGX_ERROR; } } |
