Skip to content

Commit

Permalink
allow spaces in URI
Browse files Browse the repository at this point in the history
  • Loading branch information
igorsysoev committed Jun 15, 2010
1 parent d50e53e commit da7b5e1
Show file tree
Hide file tree
Showing 5 changed files with 60 additions and 10 deletions.
2 changes: 1 addition & 1 deletion src/http/modules/ngx_http_proxy_module.c
Original file line number Diff line number Diff line change
Expand Up @@ -911,7 +911,7 @@ ngx_http_proxy_create_request(ngx_http_request_t *r)
loc_len = (r->valid_location && ctx->vars.uri.len) ?
plcf->location.len : 0;

if (r->quoted_uri || r->internal) {
if (r->quoted_uri || r->space_in_uri || r->internal) {
escape = 2 * ngx_escape_uri(NULL, r->uri.data + loc_len,
r->uri.len - loc_len, NGX_ESCAPE_URI);
}
Expand Down
4 changes: 0 additions & 4 deletions src/http/ngx_http_core_module.c
Original file line number Diff line number Diff line change
Expand Up @@ -824,10 +824,6 @@ ngx_http_handler(ngx_http_request_t *r)
r->phase_handler = cmcf->phase_engine.server_rewrite_index;
}

if (r->unparsed_uri.len) {
r->valid_unparsed_uri = 1;
}

r->valid_location = 1;
#if (NGX_HTTP_GZIP)
r->gzip_tested = 0;
Expand Down
60 changes: 55 additions & 5 deletions src/http/ngx_http_parse.c
Original file line number Diff line number Diff line change
Expand Up @@ -112,8 +112,10 @@ ngx_http_parse_request_line(ngx_http_request_t *r, ngx_buf_t *b)
sw_schema_slash_slash,
sw_host,
sw_port,
sw_host_http_09,
sw_after_slash_in_uri,
sw_check_uri,
sw_check_uri_http_09,
sw_uri,
sw_http_09,
sw_http_H,
Expand Down Expand Up @@ -357,7 +359,7 @@ ngx_http_parse_request_line(ngx_http_request_t *r, ngx_buf_t *b)
*/
r->uri_start = r->schema_end + 1;
r->uri_end = r->schema_end + 2;
state = sw_http_09;
state = sw_host_http_09;
break;
default:
return NGX_HTTP_PARSE_INVALID_REQUEST;
Expand All @@ -383,13 +385,35 @@ ngx_http_parse_request_line(ngx_http_request_t *r, ngx_buf_t *b)
*/
r->uri_start = r->schema_end + 1;
r->uri_end = r->schema_end + 2;
state = sw_http_09;
state = sw_host_http_09;
break;
default:
return NGX_HTTP_PARSE_INVALID_REQUEST;
}
break;

/* space+ after "http://host[:port] " */
case sw_host_http_09:
switch (ch) {
case ' ':
break;
case CR:
r->http_minor = 9;
state = sw_almost_done;
break;
case LF:
r->http_minor = 9;
goto done;
case 'H':
r->http_protocol.data = p;
state = sw_http_H;
break;
default:
return NGX_HTTP_PARSE_INVALID_REQUEST;
}
break;


/* check "/.", "//", "%", and "\" (Win32) in URI */
case sw_after_slash_in_uri:

Expand All @@ -401,7 +425,7 @@ ngx_http_parse_request_line(ngx_http_request_t *r, ngx_buf_t *b)
switch (ch) {
case ' ':
r->uri_end = p;
state = sw_http_09;
state = sw_check_uri_http_09;
break;
case CR:
r->uri_end = p;
Expand Down Expand Up @@ -466,7 +490,7 @@ ngx_http_parse_request_line(ngx_http_request_t *r, ngx_buf_t *b)
break;
case ' ':
r->uri_end = p;
state = sw_http_09;
state = sw_check_uri_http_09;
break;
case CR:
r->uri_end = p;
Expand Down Expand Up @@ -503,6 +527,30 @@ ngx_http_parse_request_line(ngx_http_request_t *r, ngx_buf_t *b)
}
break;

/* space+ after URI */
case sw_check_uri_http_09:
switch (ch) {
case ' ':
break;
case CR:
r->http_minor = 9;
state = sw_almost_done;
break;
case LF:
r->http_minor = 9;
goto done;
case 'H':
r->http_protocol.data = p;
state = sw_http_H;
break;
default:
r->space_in_uri = 1;
state = sw_check_uri;
break;
}
break;


/* URI */
case sw_uri:

Expand Down Expand Up @@ -549,7 +597,9 @@ ngx_http_parse_request_line(ngx_http_request_t *r, ngx_buf_t *b)
state = sw_http_H;
break;
default:
return NGX_HTTP_PARSE_INVALID_REQUEST;
r->space_in_uri = 1;
state = sw_uri;
break;
}
break;

Expand Down
1 change: 1 addition & 0 deletions src/http/ngx_http_request.c
Original file line number Diff line number Diff line change
Expand Up @@ -756,6 +756,7 @@ ngx_http_process_request_line(ngx_event_t *rev)
r->unparsed_uri.len = r->uri_end - r->uri_start;
r->unparsed_uri.data = r->uri_start;

r->valid_unparsed_uri = r->space_in_uri ? 0 : 1;

r->method_name.len = r->method_end - r->request_start + 1;
r->method_name.data = r->request_line.data;
Expand Down
3 changes: 3 additions & 0 deletions src/http/ngx_http_request.h
Original file line number Diff line number Diff line change
Expand Up @@ -437,6 +437,9 @@ struct ngx_http_request_s {
/* URI with "+" */
unsigned plus_in_uri:1;

/* URI with " " */
unsigned space_in_uri:1;

unsigned invalid_header:1;

unsigned add_uri_to_alias:1;
Expand Down

0 comments on commit da7b5e1

Please sign in to comment.