Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nginx/nginx.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2004-12-02 21:40:46 +0300
committerIgor Sysoev <igor@sysoev.ru>2004-12-02 21:40:46 +0300
commit42b12b34fa74c15cfb1746d71cde949f3d5807ef (patch)
treec44cd3f35d794e6e2be01d516e72737464f76fff /src/http/ngx_http_parse.c
parent4e7b11b02bd42ed284a5f006a13b0635fc33d556 (diff)
nginx-0.1.11-RELEASE importrelease-0.1.11
*) Feature: the worker_priority directive. *) Change: both tcp_nopush and tcp_nodelay directives affect the transferred response. *) Bugfix: nginx did not call initgroups(). Thanks to Andrew Sitnikov and Andrei Nigmatulin. *) Change: now the ngx_http_autoindex_module shows the file size in the bytes. *) Bugfix: the ngx_http_autoindex_module returned the 500 error if the broken symlink was in a directory. *) Bugfix: the files bigger than 4G could not be transferred using sendfile. *) Bugfix: if the backend was resolved to several backends and there was an error while the response waiting then process may got caught in an endless loop. *) Bugfix: the worker process may exit with the "unknown cycle" message when the /dev/poll method was used. *) Bugfix: "close() channel failed" errors. *) Bugfix: the autodetection of the "nobody" and "nogroup" groups. *) Bugfix: the send_lowat directive did not work on Linux. *) Bugfix: the segmentation fault occurred if there was no events section in configuration. *) Bugfix: nginx could not be built on OpenBSD. *) Bugfix: the double slashes in "://" in the URI were converted to ":/".
Diffstat (limited to 'src/http/ngx_http_parse.c')
-rw-r--r--src/http/ngx_http_parse.c63
1 files changed, 63 insertions, 0 deletions
diff --git a/src/http/ngx_http_parse.c b/src/http/ngx_http_parse.c
index 96ed49c74..77db813ae 100644
--- a/src/http/ngx_http_parse.c
+++ b/src/http/ngx_http_parse.c
@@ -665,6 +665,8 @@ ngx_int_t ngx_http_parse_complex_uri(ngx_http_request_t *r)
u_char c, ch, decoded, *p, *u;
enum {
sw_usual = 0,
+ sw_colon,
+ sw_colon_slash,
sw_slash,
sw_dot,
sw_dot_dot,
@@ -730,9 +732,70 @@ ngx_int_t ngx_http_parse_complex_uri(ngx_http_request_t *r)
case '?':
r->args_start = p;
break;
+ case ':':
+ state = sw_colon;
+ *u++ = ch;
+ break;
case '.':
r->uri_ext = u + 1;
+ *u++ = ch;
+ break;
+ default:
+ *u++ = ch;
+ break;
+ }
+ ch = *p++;
+ break;
+
+ case sw_colon:
+ switch(ch) {
+#if (NGX_WIN32)
+ case '\\':
+ state = sw_colon_slash;
+ *u++ = '/';
+ break;
+#endif
+ case '/':
+ state = sw_colon_slash;
+ *u++ = ch;
+ break;
+ case ':':
+ *u++ = ch;
+ break;
+ case '%':
+ quoted_state = state;
+ state = sw_quoted;
+ break;
default:
+ state = sw_usual;
+ *u++ = ch;
+ break;
+ }
+ ch = *p++;
+ break;
+
+ case sw_colon_slash:
+ switch(ch) {
+#if (NGX_WIN32)
+ case '\\':
+ state = sw_slash;
+ *u++ = '/';
+ break;
+#endif
+ case '/':
+ state = sw_slash;
+ *u++ = ch;
+ break;
+ case '.':
+ state = sw_dot;
+ *u++ = ch;
+ break;
+ case '%':
+ quoted_state = state;
+ state = sw_quoted;
+ break;
+ default:
+ state = sw_usual;
*u++ = ch;
break;
}