Fixed segfault with try_files introduced by c985d90a8d1f.

If alias was used in a location given by a regular expression,
nginx used to do wrong thing in try_files if a location name (i.e.,
regular expression) was an exact prefix of URI.  The following
configuration triggered a segmentation fault on a request to "/mail":

    location ~ /mail {
        alias /path/to/directory;
        try_files $uri =404;
    }

Reported by Per Hansson.
This commit is contained in:
Maxim Dounin 2015-08-16 10:51:16 +03:00
parent b7da4f5962
commit 4fec72dc8c

View File

@ -1239,7 +1239,9 @@ ngx_http_core_try_files_phase(ngx_http_request_t *r,
*e.pos = '\0';
if (alias && ngx_strncmp(name, clcf->name.data, alias) == 0) {
if (alias && alias != NGX_MAX_SIZE_T_VALUE
&& ngx_strncmp(name, clcf->name.data, alias) == 0)
{
ngx_memmove(name, name + alias, len - alias);
path.len -= alias;
}