# HG changeset patch # User Maxim Dounin # Date 1336742362 0 # Node ID 972642646f0644370a2116ef44ba99a1a817c72a # Parent b194fb640d3e4cd9fbd2aa5247e29e33e56c5987 Rewrite: fixed escaping and possible segfault (ticket #162). The following code resulted in incorrect escaping of uri and possible segfault: location / { rewrite ^(.*) $1?c=$1; return 200 "$uri"; } If there were arguments in a rewrite's replacement string, and length was actually calculated (due to duplicate captures as in the example above, or variables present), the is_args flag was set and incorrectly copied after length calculation. This resulted in escaping applied to the uri part of the replacement, resulting in incorrect escaping. Additionally, buffer was allocated without escaping expected, thus this also resulted in buffer overrun and possible segfault. diff --git a/src/http/ngx_http_script.c b/src/http/ngx_http_script.c --- a/src/http/ngx_http_script.c +++ b/src/http/ngx_http_script.c @@ -1043,7 +1043,6 @@ ngx_http_script_regex_start_code(ngx_htt } e->buf.len = len; - e->is_args = le.is_args; } if (code->add_args && r->args.len) {