Skip to content

Commit

Permalink
legacy default slash-matching behavior w/ 'MergeSlashes OFF'
Browse files Browse the repository at this point in the history
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1889036 13f79535-47bb-0310-9956-ffa450edef68
  • Loading branch information
covener committed Apr 21, 2021
1 parent 8951949 commit 6141d5a
Showing 1 changed file with 16 additions and 3 deletions.
19 changes: 16 additions & 3 deletions server/request.c
Original file line number Diff line number Diff line change
Expand Up @@ -1471,7 +1471,20 @@ AP_DECLARE(int) ap_location_walk(request_rec *r)

cache = prep_walk_cache(AP_NOTE_LOCATION_WALK, r);
cached = (cache->cached != NULL);
entry_uri = r->uri;

/*
* When merge_slashes is set to AP_CORE_CONFIG_OFF the slashes in r->uri
* have not been merged. But for Location walks we always go with merged
* slashes no matter what merge_slashes is set to.
*/
if (sconf->merge_slashes != AP_CORE_CONFIG_OFF) {
entry_uri = r->uri;
}
else {
char *uri = apr_pstrdup(r->pool, r->uri);
ap_no2slash(uri);
entry_uri = uri;
}

/* If we have an cache->cached location that matches r->uri,
* and the vhost's list of locations hasn't changed, we can skip
Expand Down Expand Up @@ -1539,7 +1552,7 @@ AP_DECLARE(int) ap_location_walk(request_rec *r)
pmatch = apr_palloc(rxpool, nmatch*sizeof(ap_regmatch_t));
}

if (ap_regexec(entry_core->r, entry_uri, nmatch, pmatch, 0)) {
if (ap_regexec(entry_core->r, r->uri, nmatch, pmatch, 0)) {
continue;
}

Expand All @@ -1549,7 +1562,7 @@ AP_DECLARE(int) ap_location_walk(request_rec *r)
apr_table_setn(r->subprocess_env,
((const char **)entry_core->refs->elts)[i],
apr_pstrndup(r->pool,
entry_uri + pmatch[i].rm_so,
r->uri + pmatch[i].rm_so,
pmatch[i].rm_eo - pmatch[i].rm_so));
}
}
Expand Down

0 comments on commit 6141d5a

Please sign in to comment.