mirror of https://github.com/nginx/nginx
Merge 47d3daf0f4 into c70457482c
This commit is contained in:
commit
0801825008
|
|
@ -1566,6 +1566,26 @@ ngx_escape_uri(u_char *dst, u_char *src, size_t size, ngx_uint_t type)
|
|||
/* ~}| {zyx wvut srqp onml kjih gfed cba` */
|
||||
0xb8000001, /* 1011 1000 0000 0000 0000 0000 0000 0001 */
|
||||
|
||||
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
||||
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
||||
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
||||
0xffffffff /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
||||
};
|
||||
|
||||
/* " ", "#", "%", ";", "?", not allowed */
|
||||
|
||||
static uint32_t uri_path[] = {
|
||||
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
||||
|
||||
/* ?>=< ;:98 7654 3210 /.-, +*)( '&%$ #"! */
|
||||
0xd800002d, /* 1101 1000 0000 0000 0000 0000 0010 1101 */
|
||||
|
||||
/* _^]\ [ZYX WVUT SRQP ONML KJIH GFED CBA@ */
|
||||
0x50000000, /* 0101 0000 0000 0000 0000 0000 0000 0000 */
|
||||
|
||||
/* ~}| {zyx wvut srqp onml kjih gfed cba` */
|
||||
0xb8000001, /* 1011 1000 0000 0000 0000 0000 0000 0001 */
|
||||
|
||||
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
||||
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
||||
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
||||
|
|
@ -1656,12 +1676,11 @@ ngx_escape_uri(u_char *dst, u_char *src, size_t size, ngx_uint_t type)
|
|||
|
||||
static uint32_t *map[] =
|
||||
{ uri, args, uri_component, html, refresh, memcached, memcached,
|
||||
mail_xtext };
|
||||
mail_xtext, uri_path };
|
||||
|
||||
static u_char map_char[] =
|
||||
{ '%', '%', '%', '%', '%', '%', '%', '+' };
|
||||
|
||||
|
||||
escape = map[type];
|
||||
prefix = map_char[type];
|
||||
|
||||
|
|
|
|||
|
|
@ -204,6 +204,7 @@ u_char *ngx_utf8_cpystrn(u_char *dst, u_char *src, size_t n, size_t len);
|
|||
#define NGX_ESCAPE_MEMCACHED 5
|
||||
#define NGX_ESCAPE_MAIL_AUTH 6
|
||||
#define NGX_ESCAPE_MAIL_XTEXT 7
|
||||
#define NGX_ESCAPE_URI_PATH 8
|
||||
|
||||
#define NGX_UNESCAPE_URI 1
|
||||
#define NGX_UNESCAPE_REDIRECT 2
|
||||
|
|
|
|||
|
|
@ -1133,12 +1133,8 @@ ngx_http_proxy_create_key(ngx_http_request_t *r)
|
|||
loc_len = (r->valid_location && ctx->vars.uri.len)
|
||||
? ngx_min(plcf->location.len, r->uri.len) : 0;
|
||||
|
||||
if (r->quoted_uri || r->internal) {
|
||||
escape = 2 * ngx_escape_uri(NULL, r->uri.data + loc_len,
|
||||
r->uri.len - loc_len, NGX_ESCAPE_URI);
|
||||
} else {
|
||||
escape = 0;
|
||||
}
|
||||
escape = 2 * ngx_escape_uri(NULL, r->uri.data + loc_len,
|
||||
r->uri.len - loc_len, NGX_ESCAPE_URI_PATH);
|
||||
|
||||
len = ctx->vars.uri.len + r->uri.len - loc_len + escape
|
||||
+ sizeof("?") - 1 + r->args.len;
|
||||
|
|
@ -1156,7 +1152,7 @@ ngx_http_proxy_create_key(ngx_http_request_t *r)
|
|||
|
||||
if (escape) {
|
||||
ngx_escape_uri(p, r->uri.data + loc_len,
|
||||
r->uri.len - loc_len, NGX_ESCAPE_URI);
|
||||
r->uri.len - loc_len, NGX_ESCAPE_URI_PATH);
|
||||
p += r->uri.len - loc_len + escape;
|
||||
|
||||
} else {
|
||||
|
|
@ -1246,10 +1242,8 @@ ngx_http_proxy_create_request(ngx_http_request_t *r)
|
|||
loc_len = (r->valid_location && ctx->vars.uri.len)
|
||||
? ngx_min(plcf->location.len, r->uri.len) : 0;
|
||||
|
||||
if (r->quoted_uri || r->internal) {
|
||||
escape = 2 * ngx_escape_uri(NULL, r->uri.data + loc_len,
|
||||
r->uri.len - loc_len, NGX_ESCAPE_URI);
|
||||
}
|
||||
escape = 2 * ngx_escape_uri(NULL, r->uri.data + loc_len,
|
||||
r->uri.len - loc_len, NGX_ESCAPE_URI_PATH);
|
||||
|
||||
uri_len = ctx->vars.uri.len + r->uri.len - loc_len + escape
|
||||
+ sizeof("?") - 1 + r->args.len;
|
||||
|
|
@ -1373,7 +1367,7 @@ ngx_http_proxy_create_request(ngx_http_request_t *r)
|
|||
|
||||
if (escape) {
|
||||
ngx_escape_uri(b->last, r->uri.data + loc_len,
|
||||
r->uri.len - loc_len, NGX_ESCAPE_URI);
|
||||
r->uri.len - loc_len, NGX_ESCAPE_URI_PATH);
|
||||
b->last += r->uri.len - loc_len + escape;
|
||||
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -404,10 +404,8 @@ ngx_http_proxy_v2_create_request(ngx_http_request_t *r)
|
|||
loc_len = (r->valid_location && ctx->ctx.vars.uri.len)
|
||||
? ngx_min(plcf->location.len, r->uri.len) : 0;
|
||||
|
||||
if (r->quoted_uri || r->internal) {
|
||||
escape = 2 * ngx_escape_uri(NULL, r->uri.data + loc_len,
|
||||
r->uri.len - loc_len, NGX_ESCAPE_URI);
|
||||
}
|
||||
escape = 2 * ngx_escape_uri(NULL, r->uri.data + loc_len,
|
||||
r->uri.len - loc_len, NGX_ESCAPE_URI_PATH);
|
||||
|
||||
uri_len = ctx->ctx.vars.uri.len + r->uri.len - loc_len + escape
|
||||
+ sizeof("?") - 1 + r->args.len;
|
||||
|
|
@ -650,7 +648,7 @@ ngx_http_proxy_v2_create_request(ngx_http_request_t *r)
|
|||
|
||||
if (escape) {
|
||||
ngx_escape_uri(p, r->uri.data + loc_len,
|
||||
r->uri.len - loc_len, NGX_ESCAPE_URI);
|
||||
r->uri.len - loc_len, NGX_ESCAPE_URI_PATH);
|
||||
p += r->uri.len - loc_len + escape;
|
||||
|
||||
} else {
|
||||
|
|
|
|||
Loading…
Reference in New Issue