From f9cd50b782e860b54feee2b0ae8f0279058e85fe Mon Sep 17 00:00:00 2001 From: Glenn Strauss Date: Mon, 15 Mar 2021 17:26:37 -0400 Subject: [PATCH] [core] modify path in-place checking for path-info --- src/response.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/response.c b/src/response.c index f1ec040e..2ef00032 100644 --- a/src/response.c +++ b/src/response.c @@ -234,10 +234,14 @@ static handler_t http_response_physical_path_check(request_st * const r) { } } - buffer * const tb = r->tmp_buf; + const uint32_t pathused = r->physical.path.used; for (char *pprev = pathinfo; pathinfo; pprev = pathinfo, pathinfo = strchr(pathinfo+1, '/')) { - buffer_copy_string_len(tb, r->physical.path.ptr, pathinfo - r->physical.path.ptr); - const stat_cache_st * const nst = stat_cache_path_stat(tb); + /*(temporarily modify r->physical.path in-place)*/ + r->physical.path.used = pathinfo - r->physical.path.ptr + 1; + *pathinfo = '\0'; + const stat_cache_st * const nst = stat_cache_path_stat(&r->physical.path); + *pathinfo = '/'; + r->physical.path.used = pathused; if (NULL == nst) { pathinfo = pathinfo != pprev ? pprev : NULL; break; @@ -253,7 +257,7 @@ static handler_t http_response_physical_path_check(request_st * const r) { /* we have a PATHINFO */ if (pathinfo) { - size_t len = strlen(pathinfo), reqlen; + size_t len = r->physical.path.ptr+pathused-1-pathinfo, reqlen; if (r->conf.force_lowercase_filenames && len <= (reqlen = buffer_string_length(&r->target)) && buffer_eq_icase_ssn(r->target.ptr + reqlen - len, pathinfo, len)) {