diff options
author | Igor Sysoev <igor@sysoev.ru> | 2007-10-18 11:33:31 +0000 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2007-10-18 11:33:31 +0000 |
commit | 4c5207fd563eda01384ede94758ff333879abffc (patch) | |
tree | bbf223f2a70e08de4437736cbb01c6a5ef9477c1 /src | |
parent | b2f5a4a971df968391e221955ebd9a1b09ca6389 (diff) | |
download | nginx-4c5207fd563eda01384ede94758ff333879abffc.tar.gz nginx-4c5207fd563eda01384ede94758ff333879abffc.zip |
allow full URL without URI part: "GET http://host HTTP/1.0"
Diffstat (limited to 'src')
-rw-r--r-- | src/http/ngx_http_parse.c | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/src/http/ngx_http_parse.c b/src/http/ngx_http_parse.c index 559a5cbd5..40e7700d3 100644 --- a/src/http/ngx_http_parse.c +++ b/src/http/ngx_http_parse.c @@ -335,18 +335,26 @@ ngx_http_parse_request_line(ngx_http_request_t *r, ngx_buf_t *b) break; } + r->host_end = p; + switch (ch) { case ':': - r->host_end = p; state = sw_port; break; case '/': - r->host_end = p; r->uri_start = p; state = sw_after_slash_in_uri; break; + case ' ': + /* + * use single "/" from request line to preserve pointers, + * if request line will be copied to large client buffer + */ + r->uri_start = r->schema_end + 1; + r->uri_end = r->schema_end + 2; + state = sw_http_09; + break; default: - r->host_end = p; return NGX_HTTP_PARSE_INVALID_REQUEST; } break; @@ -362,6 +370,16 @@ ngx_http_parse_request_line(ngx_http_request_t *r, ngx_buf_t *b) r->uri_start = p; state = sw_after_slash_in_uri; break; + case ' ': + r->port_end = p; + /* + * use single "/" from request line to preserve pointers, + * if request line will be copied to large client buffer + */ + r->uri_start = r->schema_end + 1; + r->uri_end = r->schema_end + 2; + state = sw_http_09; + break; default: return NGX_HTTP_PARSE_INVALID_REQUEST; } |