Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nginx/nginx.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorValentin Bartenev <vbart@nginx.com>2013-08-06 19:58:40 +0400
committerValentin Bartenev <vbart@nginx.com>2013-08-06 19:58:40 +0400
commit3c5bd34771be032ef14e59f934058b3dce93588b (patch)
treea71e5b734bca4200959241d928410ba98f48070b /src/core/ngx_conf_file.c
parent1b7bc342186ff0768c06419a134032adb2a536f8 (diff)
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 'src/core/ngx_conf_file.c')
-rw-r--r--src/core/ngx_conf_file.c94
1 files changed, 4 insertions, 90 deletions
diff --git a/src/core/ngx_conf_file.c b/src/core/ngx_conf_file.c
index 0d12ec2cd..6cfb5d58d 100644
--- a/src/core/ngx_conf_file.c
+++ b/src/core/ngx_conf_file.c
@@ -12,7 +12,6 @@
static ngx_int_t ngx_conf_handler(ngx_conf_t *cf, ngx_int_t last);
static ngx_int_t ngx_conf_read_token(ngx_conf_t *cf);
-static ngx_int_t ngx_conf_test_full_name(ngx_str_t *name);
static void ngx_conf_flush_files(ngx_cycle_t *cycle);
@@ -801,95 +800,10 @@ ngx_conf_include(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
ngx_int_t
ngx_conf_full_name(ngx_cycle_t *cycle, ngx_str_t *name, ngx_uint_t conf_prefix)
{
- size_t len;
- u_char *p, *n, *prefix;
- ngx_int_t rc;
-
- rc = ngx_conf_test_full_name(name);
-
- if (rc == NGX_OK) {
- return rc;
- }
-
- if (conf_prefix) {
- len = cycle->conf_prefix.len;
- prefix = cycle->conf_prefix.data;
-
- } else {
- len = cycle->prefix.len;
- prefix = cycle->prefix.data;
- }
-
-#if (NGX_WIN32)
-
- if (rc == 2) {
- len = rc;
- }
-
-#endif
-
- n = ngx_pnalloc(cycle->pool, len + name->len + 1);
- if (n == NULL) {
- return NGX_ERROR;
- }
-
- p = ngx_cpymem(n, prefix, len);
- ngx_cpystrn(p, name->data, name->len + 1);
-
- name->len += len;
- name->data = n;
-
- return NGX_OK;
-}
-
-
-static ngx_int_t
-ngx_conf_test_full_name(ngx_str_t *name)
-{
-#if (NGX_WIN32)
- u_char c0, c1;
-
- c0 = name->data[0];
-
- if (name->len < 2) {
- if (c0 == '/') {
- return 2;
- }
-
- return NGX_DECLINED;
- }
-
- c1 = name->data[1];
-
- if (c1 == ':') {
- c0 |= 0x20;
-
- if ((c0 >= 'a' && c0 <= 'z')) {
- return NGX_OK;
- }
-
- return NGX_DECLINED;
- }
-
- if (c1 == '/') {
- return NGX_OK;
- }
-
- if (c0 == '/') {
- return 2;
- }
-
- return NGX_DECLINED;
-
-#else
-
- if (name->data[0] == '/') {
- return NGX_OK;
- }
-
- return NGX_DECLINED;
-
-#endif
+ return ngx_get_full_name(cycle->pool,
+ conf_prefix ? &cycle->conf_prefix:
+ &cycle->prefix,
+ name);
}