[nginx] svn commit: r4675 - trunk/src/http

mdounin at mdounin.ru mdounin at mdounin.ru
Tue Jun 5 13:37:30 UTC 2012


Author: mdounin
Date: 2012-06-05 13:37:29 +0000 (Tue, 05 Jun 2012)
New Revision: 4675
URL: http://trac.nginx.org/nginx/changeset/4675/nginx

Log:
Win32: normalization of trailing dot inside uri.

Windows treats "/directory./" identical to "/directory/".  Do the same
when working on Windows.  Note that the behaviour is different from one
with last path component (where multiple spaces and dots are ignored by
Windows).


Modified:
   trunk/src/http/ngx_http_parse.c

Modified: trunk/src/http/ngx_http_parse.c
===================================================================
--- trunk/src/http/ngx_http_parse.c	2012-06-05 13:36:09 UTC (rev 4674)
+++ trunk/src/http/ngx_http_parse.c	2012-06-05 13:37:29 UTC (rev 4675)
@@ -543,6 +543,13 @@
 
             switch (ch) {
             case '/':
+#if (NGX_WIN32)
+                if (r->uri_ext == p) {
+                    r->complex_uri = 1;
+                    state = sw_uri;
+                    break;
+                }
+#endif
                 r->uri_ext = NULL;
                 state = sw_after_slash_in_uri;
                 break;
@@ -1117,6 +1124,12 @@
             switch(ch) {
 #if (NGX_WIN32)
             case '\\':
+                if (u - 2 >= r->uri.data
+                    && *(u - 1) == '.' && *(u - 2) != '.')
+                {
+                    u--;
+                }
+
                 r->uri_ext = NULL;
 
                 if (p == r->uri_start + r->uri.len) {
@@ -1134,6 +1147,13 @@
                 break;
 #endif
             case '/':
+#if (NGX_WIN32)
+                if (u - 2 >= r->uri.data
+                    && *(u - 1) == '.' && *(u - 2) != '.')
+                {
+                    u--;
+                }
+#endif
                 r->uri_ext = NULL;
                 state = sw_slash;
                 *u++ = ch;



More information about the nginx-devel mailing list