From af8ea176a743e97d767b3e1439d549b52dd0367a Mon Sep 17 00:00:00 2001 From: Ruslan Ermilov Date: Mon, 16 Dec 2019 15:19:01 +0300 Subject: [PATCH] Rewrite: fixed segfault with rewritten URI and "alias". The "alias" directive cannot be used in the same location where URI was rewritten. This has been detected in the "rewrite ... break" case, but not when the standalone "break" directive was used. This change also fixes proxy_pass with URI component in a similar case: location /aaa/ { rewrite ^ /xxx/yyy; break; proxy_pass http://localhost:8080/bbb/; } Previously, the "/bbb/yyy" would be sent to a backend instead of "/xxx/yyy". And if location's prefix was longer than the rewritten URI, a segmentation fault might occur. --- src/http/ngx_http_script.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/http/ngx_http_script.c b/src/http/ngx_http_script.c index f2f5a1ca8..13c57d6d9 100644 --- a/src/http/ngx_http_script.c +++ b/src/http/ngx_http_script.c @@ -1470,7 +1470,14 @@ ngx_http_script_return_code(ngx_http_script_engine_t *e) void ngx_http_script_break_code(ngx_http_script_engine_t *e) { - e->request->uri_changed = 0; + ngx_http_request_t *r; + + r = e->request; + + if (r->uri_changed) { + r->valid_location = 0; + r->uri_changed = 0; + } e->ip = ngx_http_script_exit; }