mirror of
https://github.com/nginx/nginx.git
synced 2024-12-18 21:23:36 -06:00
Perl: expect escaped URIs in $r->internal_redirect().
Similarly to the change in 5491:74bfa803a5aa (1.5.9), we should accept properly escaped URIs and unescape them as needed, else it is not possible to handle URIs with question marks.
This commit is contained in:
parent
9e883a2e48
commit
8df08b02b8
@ -952,17 +952,6 @@ internal_redirect(r, uri)
|
|||||||
croak("ngx_http_perl_sv2str() failed");
|
croak("ngx_http_perl_sv2str() failed");
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < ctx->redirect_uri.len; i++) {
|
|
||||||
if (ctx->redirect_uri.data[i] == '?') {
|
|
||||||
|
|
||||||
ctx->redirect_args.len = ctx->redirect_uri.len - (i + 1);
|
|
||||||
ctx->redirect_args.data = &ctx->redirect_uri.data[i + 1];
|
|
||||||
ctx->redirect_uri.len = i;
|
|
||||||
|
|
||||||
XSRETURN_EMPTY;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
allow_ranges(r)
|
allow_ranges(r)
|
||||||
|
@ -184,6 +184,7 @@ ngx_http_perl_handle_request(ngx_http_request_t *r)
|
|||||||
SV *sub;
|
SV *sub;
|
||||||
ngx_int_t rc;
|
ngx_int_t rc;
|
||||||
ngx_str_t uri, args, *handler;
|
ngx_str_t uri, args, *handler;
|
||||||
|
ngx_uint_t flags;
|
||||||
ngx_http_perl_ctx_t *ctx;
|
ngx_http_perl_ctx_t *ctx;
|
||||||
ngx_http_perl_loc_conf_t *plcf;
|
ngx_http_perl_loc_conf_t *plcf;
|
||||||
ngx_http_perl_main_conf_t *pmcf;
|
ngx_http_perl_main_conf_t *pmcf;
|
||||||
@ -237,7 +238,6 @@ ngx_http_perl_handle_request(ngx_http_request_t *r)
|
|||||||
|
|
||||||
if (ctx->redirect_uri.len) {
|
if (ctx->redirect_uri.len) {
|
||||||
uri = ctx->redirect_uri;
|
uri = ctx->redirect_uri;
|
||||||
args = ctx->redirect_args;
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
uri.len = 0;
|
uri.len = 0;
|
||||||
@ -257,6 +257,14 @@ ngx_http_perl_handle_request(ngx_http_request_t *r)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (uri.len) {
|
if (uri.len) {
|
||||||
|
ngx_str_null(&args);
|
||||||
|
flags = NGX_HTTP_LOG_UNSAFE;
|
||||||
|
|
||||||
|
if (ngx_http_parse_unsafe_uri(r, &uri, &args, &flags) != NGX_OK) {
|
||||||
|
ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
ngx_http_internal_redirect(r, &uri, &args);
|
ngx_http_internal_redirect(r, &uri, &args);
|
||||||
ngx_http_finalize_request(r, NGX_DONE);
|
ngx_http_finalize_request(r, NGX_DONE);
|
||||||
return;
|
return;
|
||||||
|
@ -25,7 +25,6 @@ typedef struct {
|
|||||||
|
|
||||||
ngx_str_t filename;
|
ngx_str_t filename;
|
||||||
ngx_str_t redirect_uri;
|
ngx_str_t redirect_uri;
|
||||||
ngx_str_t redirect_args;
|
|
||||||
|
|
||||||
SV *next;
|
SV *next;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user