]> git.kaiwu.me - nginx.git/commitdiff
fix "/dir/%3F../" and "/dir/%23../" cases
authorIgor Sysoev <igor@sysoev.ru>
Fri, 4 Jun 2010 16:05:55 +0000 (16:05 +0000)
committerIgor Sysoev <igor@sysoev.ru>
Fri, 4 Jun 2010 16:05:55 +0000 (16:05 +0000)
src/http/ngx_http_parse.c

index 2952e02eaba7caaef236a7dab8fef17d1ba28128..272f030ede0edc3953a311120941f30bcf99c683 100644 (file)
@@ -1187,16 +1187,11 @@ ngx_http_parse_complex_uri(ngx_http_request_t *r, ngx_uint_t merge_slashes)
             if (ch >= '0' && ch <= '9') {
                 ch = (u_char) ((decoded << 4) + ch - '0');
 
-                if (ch == '%') {
+                if (ch == '%' || ch == '#') {
                     state = sw_usual;
                     *u++ = ch;
                     ch = *p++;
                     break;
-                }
-
-                if (ch == '#') {
-                    *u++ = ch;
-                    ch = *p++;
 
                 } else if (ch == '\0') {
                     return NGX_HTTP_PARSE_INVALID_REQUEST;
@@ -1211,8 +1206,10 @@ ngx_http_parse_complex_uri(ngx_http_request_t *r, ngx_uint_t merge_slashes)
                 ch = (u_char) ((decoded << 4) + c - 'a' + 10);
 
                 if (ch == '?') {
+                    state = sw_usual;
                     *u++ = ch;
                     ch = *p++;
+                    break;
 
                 } else if (ch == '+') {
                     r->plus_in_uri = 1;