[nginx] svn commit: r4559 - in trunk/src: http os/unix os/win32

mdounin at mdounin.ru mdounin at mdounin.ru
Tue Mar 27 16:42:34 UTC 2012


Author: mdounin
Date: 2012-03-27 16:42:34 +0000 (Tue, 27 Mar 2012)
New Revision: 4559
URL: http://trac.nginx.org/nginx/changeset/4559/nginx

Log:
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.


Modified:
   trunk/src/http/ngx_http_variables.c
   trunk/src/os/unix/ngx_files.h
   trunk/src/os/win32/ngx_files.h

Modified: trunk/src/http/ngx_http_variables.c
===================================================================
--- trunk/src/http/ngx_http_variables.c	2012-03-27 16:37:43 UTC (rev 4558)
+++ trunk/src/http/ngx_http_variables.c	2012-03-27 16:42:34 UTC (rev 4559)
@@ -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;
 }
 

Modified: trunk/src/os/unix/ngx_files.h
===================================================================
--- trunk/src/os/unix/ngx_files.h	2012-03-27 16:37:43 UTC (rev 4558)
+++ trunk/src/os/unix/ngx_files.h	2012-03-27 16:42:34 UTC (rev 4559)
@@ -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
 
 

Modified: trunk/src/os/win32/ngx_files.h
===================================================================
--- trunk/src/os/win32/ngx_files.h	2012-03-27 16:37:43 UTC (rev 4558)
+++ trunk/src/os/win32/ngx_files.h	2012-03-27 16:42:34 UTC (rev 4559)
@@ -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 *) "/*"



More information about the nginx-devel mailing list