diff src/http/ngx_http_parse.c @ 206:3866d57d9cfd NGINX_0_3_50

nginx 0.3.50 *) Change: the "proxy_redirect_errors" and "fastcgi_redirect_errors" directives was renamed to the "proxy_intercept_errors" and "fastcgi_intercept_errors" directives. *) Feature: the ngx_http_charset_module supports the recoding from the single byte encodings to the UTF-8 encoding and back. *) Feature: the "X-Accel-Charset" response header line is supported in proxy and FastCGI mode. *) Bugfix: the "\" escape symbol in the "\"" and "\'" pairs in the SSI command was removed only if the command also has the "$" symbol. *) Bugfix: the "<!--" string might be added on some conditions in the SSI after inclusion. *) Bugfix: if the "Content-Length: 0" header line was in response, then in nonbuffered proxying mode the client connection was not closed.
author Igor Sysoev <http://sysoev.ru>
date Wed, 28 Jun 2006 00:00:00 +0400
parents e6da4931e0e0
children fa32d59d9a15
line wrap: on
line diff
--- a/src/http/ngx_http_parse.c
+++ b/src/http/ngx_http_parse.c
@@ -337,13 +337,13 @@ ngx_http_parse_request_line(ngx_http_req
                 r->quoted_uri = 1;
                 state = sw_uri;
                 break;
-            case '+':
-                r->plus_in_uri = 1;
-                break;
             case '?':
                 r->args_start = p + 1;
                 state = sw_uri;
                 break;
+            case '+':
+                r->plus_in_uri = 1;
+                break;
             case '\0':
                 r->zero_in_uri = 1;
                 break;
@@ -366,9 +366,6 @@ ngx_http_parse_request_line(ngx_http_req
                 r->uri_end = p;
                 r->http_minor = 9;
                 goto done;
-            case '+':
-                r->plus_in_uri = 1;
-                break;
             case '\0':
                 r->zero_in_uri = 1;
                 break;
@@ -828,6 +825,8 @@ ngx_http_parse_complex_uri(ngx_http_requ
                 r->uri_ext = u + 1;
                 *u++ = ch;
                 break;
+            case '+':
+                r->plus_in_uri = 1;
             default:
                 *u++ = ch;
                 break;
@@ -853,6 +852,8 @@ ngx_http_parse_complex_uri(ngx_http_requ
             case '?':
                 r->args_start = p;
                 goto done;
+            case '+':
+                r->plus_in_uri = 1;
             default:
                 state = sw_usual;
                 *u++ = ch;
@@ -881,6 +882,8 @@ ngx_http_parse_complex_uri(ngx_http_requ
             case '?':
                 r->args_start = p;
                 goto done;
+            case '+':
+                r->plus_in_uri = 1;
             default:
                 state = sw_usual;
                 *u++ = ch;
@@ -917,6 +920,8 @@ ngx_http_parse_complex_uri(ngx_http_requ
                 *u++ = ch;
                 break;
 #endif
+            case '+':
+                r->plus_in_uri = 1;
             default:
                 state = sw_usual;
                 *u++ = ch;
@@ -952,6 +957,8 @@ ngx_http_parse_complex_uri(ngx_http_requ
             case '?':
                 r->args_start = p;
                 goto done;
+            case '+':
+                r->plus_in_uri = 1;
             default:
                 state = sw_usual;
                 *u++ = ch;
@@ -992,8 +999,6 @@ ngx_http_parse_complex_uri(ngx_http_requ
 
                 if (ch == '\0') {
                     r->zero_in_uri = 1;
-                    *u++ = ch;
-                    ch = *p++;
                 }
 
                 state = quoted_state;
@@ -1003,10 +1008,15 @@ ngx_http_parse_complex_uri(ngx_http_requ
             c = (u_char) (ch | 0x20);
             if (c >= 'a' && c <= 'f') {
                 ch = (u_char) ((decoded << 4) + c - 'a' + 10);
+
                 if (ch == '?') {
                     *u++ = ch;
                     ch = *p++;
+
+                } else if (ch == '+') {
+                    r->plus_in_uri = 1;
                 }
+
                 state = quoted_state;
                 break;
             }