Mercurial > hg > nginx
changeset 4558:8865fd1f3aa5
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.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Tue, 27 Mar 2012 16:42:34 +0000 |
parents | b13419459a50 |
children | 62d8db8c7157 |
files | src/http/ngx_http_variables.c src/os/unix/ngx_files.h src/os/win32/ngx_files.h |
diffstat | 3 files changed, 33 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/http/ngx_http_variables.c Tue Mar 27 16:37:43 2012 +0000 +++ b/src/http/ngx_http_variables.c Tue Mar 27 16:42:34 2012 +0000 @@ -1273,10 +1273,13 @@ 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 @@ } } - 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 @@ 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_memcpy(v->data, real, len); +#if !(NGX_HAVE_MAX_PATH) + ngx_free(real); +#endif + return NGX_OK; }
--- a/src/os/unix/ngx_files.h Tue Mar 27 16:37:43 2012 +0000 +++ b/src/os/unix/ngx_files.h Tue Mar 27 16:42:34 2012 +0000 @@ -200,14 +200,25 @@ #endif -#define ngx_realpath(p, r) realpath((char *) p, (char *) r) +#define ngx_realpath(p, r) (u_char *) realpath((char *) p, (char *) r) #define ngx_realpath_n "realpath()" #define ngx_getcwd(buf, size) (getcwd((char *) buf, size) != NULL) #define ngx_getcwd_n "getcwd()" #define ngx_path_separator(c) ((c) == '/') + +#if defined(PATH_MAX) + +#define NGX_HAVE_MAX_PATH 1 #define NGX_MAX_PATH PATH_MAX +#else + +#define NGX_MAX_PATH 4096 + +#endif + + #define NGX_DIR_MASK_LEN 0
--- a/src/os/win32/ngx_files.h Tue Mar 27 16:37:43 2012 +0000 +++ b/src/os/win32/ngx_files.h Tue Mar 27 16:42:34 2012 +0000 @@ -183,6 +183,7 @@ #define ngx_getcwd_n "GetCurrentDirectory()" #define ngx_path_separator(c) ((c) == '/' || (c) == '\\') +#define NGX_HAVE_MAX_PATH 1 #define NGX_MAX_PATH MAX_PATH #define NGX_DIR_MASK (u_char *) "/*"