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).
This commit is contained in:
Maxim Dounin 2012-06-05 13:37:29 +00:00
parent db80a7adfc
commit f83598a359

View File

@ -543,6 +543,13 @@ ngx_http_parse_request_line(ngx_http_request_t *r, ngx_buf_t *b)
switch (ch) { switch (ch) {
case '/': case '/':
#if (NGX_WIN32)
if (r->uri_ext == p) {
r->complex_uri = 1;
state = sw_uri;
break;
}
#endif
r->uri_ext = NULL; r->uri_ext = NULL;
state = sw_after_slash_in_uri; state = sw_after_slash_in_uri;
break; break;
@ -1117,6 +1124,12 @@ ngx_http_parse_complex_uri(ngx_http_request_t *r, ngx_uint_t merge_slashes)
switch(ch) { switch(ch) {
#if (NGX_WIN32) #if (NGX_WIN32)
case '\\': case '\\':
if (u - 2 >= r->uri.data
&& *(u - 1) == '.' && *(u - 2) != '.')
{
u--;
}
r->uri_ext = NULL; r->uri_ext = NULL;
if (p == r->uri_start + r->uri.len) { if (p == r->uri_start + r->uri.len) {
@ -1134,6 +1147,13 @@ ngx_http_parse_complex_uri(ngx_http_request_t *r, ngx_uint_t merge_slashes)
break; break;
#endif #endif
case '/': case '/':
#if (NGX_WIN32)
if (u - 2 >= r->uri.data
&& *(u - 1) == '.' && *(u - 2) != '.')
{
u--;
}
#endif
r->uri_ext = NULL; r->uri_ext = NULL;
state = sw_slash; state = sw_slash;
*u++ = ch; *u++ = ch;