diff options
author | Maxim Dounin <mdounin@mdounin.ru> | 2012-03-27 16:42:34 +0000 |
---|---|---|
committer | Maxim Dounin <mdounin@mdounin.ru> | 2012-03-27 16:42:34 +0000 |
commit | 36aef0c383bfe285a12b4b826563a768efe181d6 (patch) | |
tree | 13539e52b48ec5bf8a73e58afb8923c9310f0d35 /src/http/ngx_http_variables.c | |
parent | 7b2b17a6b3473e2d23e1ed55794fbaa416498738 (diff) | |
download | nginx-36aef0c383bfe285a12b4b826563a768efe181d6.tar.gz nginx-36aef0c383bfe285a12b4b826563a768efe181d6.zip |
Fixed unconditional MAX_PATH usage (ticket #22).
POSIX doesn't require it to be defined, and Debian GNU/Hurd doesn't define
it. Note that if there is no MAX_PATH defined we have to use realpath()
with NULL argument and free() the result.
Diffstat (limited to 'src/http/ngx_http_variables.c')
-rw-r--r-- | src/http/ngx_http_variables.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/src/http/ngx_http_variables.c b/src/http/ngx_http_variables.c index 5de691d62..744bd0b68 100644 --- a/src/http/ngx_http_variables.c +++ b/src/http/ngx_http_variables.c @@ -1273,10 +1273,13 @@ static ngx_int_t ngx_http_variable_realpath_root(ngx_http_request_t *r, ngx_http_variable_value_t *v, uintptr_t data) { + u_char *real; size_t len; ngx_str_t path; ngx_http_core_loc_conf_t *clcf; - u_char real[NGX_MAX_PATH]; +#if (NGX_HAVE_MAX_PATH) + u_char buffer[NGX_MAX_PATH]; +#endif clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module); @@ -1298,7 +1301,15 @@ ngx_http_variable_realpath_root(ngx_http_request_t *r, } } - if (ngx_realpath(path.data, real) == NULL) { +#if (NGX_HAVE_MAX_PATH) + real = buffer; +#else + real = NULL; +#endif + + real = ngx_realpath(path.data, real); + + if (real == NULL) { ngx_log_error(NGX_LOG_CRIT, r->connection->log, ngx_errno, ngx_realpath_n " \"%s\" failed", path.data); return NGX_ERROR; @@ -1308,6 +1319,9 @@ ngx_http_variable_realpath_root(ngx_http_request_t *r, v->data = ngx_pnalloc(r->pool, len); if (v->data == NULL) { +#if !(NGX_HAVE_MAX_PATH) + ngx_free(real); +#endif return NGX_ERROR; } @@ -1318,6 +1332,10 @@ ngx_http_variable_realpath_root(ngx_http_request_t *r, ngx_memcpy(v->data, real, len); +#if !(NGX_HAVE_MAX_PATH) + ngx_free(real); +#endif + return NGX_OK; } |