]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
* In the reverse proxy case r->filename might contain a query string if
authorRuediger Pluem <rpluem@apache.org>
Tue, 7 Feb 2023 14:20:37 +0000 (14:20 +0000)
committerRuediger Pluem <rpluem@apache.org>
Tue, 7 Feb 2023 14:20:37 +0000 (14:20 +0000)
  the nocanon option was used with ProxyPass.
  If this is the case cut off the query string as the last parameter in
  this query string might end up on an extension we take care about, but
  we only want to match against path components not against query
  parameters.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1907505 13f79535-47bb-0310-9956-ffa450edef68

modules/http/mod_mime.c

index 3cf907148caf7a4e570a6fd61edd4e82145243ce..13d258945632d3dc6171754e4da13a7752f64e75 100644 (file)
@@ -813,7 +813,7 @@ static int find_ct(request_rec *r)
     mime_dir_config *conf;
     apr_array_header_t *exception_list;
     char *ext;
-    const char *fn, *fntmp, *type, *charset = NULL, *resource_name;
+    const char *fn, *fntmp, *type, *charset = NULL, *resource_name, *qm;
     int found_metadata = 0;
 
     if (r->finfo.filetype == APR_DIR) {
@@ -837,6 +837,19 @@ static int find_ct(request_rec *r)
     if (conf->use_path_info & 1) {
         resource_name = apr_pstrcat(r->pool, r->filename, r->path_info, NULL);
     }
+    /*
+     * In the reverse proxy case r->filename might contain a query string if
+     * the nocanon option was used with ProxyPass.
+     * If this is the case cut off the query string as the last parameter in
+     * this query string might end up on an extension we take care about, but
+     * we only want to match against path components not against query
+     * parameters.
+     */
+    else if ((r->proxyreq == PROXYREQ_REVERSE)
+             && (apr_table_get(r->notes, "proxy-nocanon"))
+             && ((qm = ap_strchr_c(r->filename, '?')) != NULL)) {
+        resource_name = apr_pstrmemdup(r->pool, r->filename, qm - r->filename);
+    }
     else {
         resource_name = r->filename;
     }