73 lines
2.7 KiB
Diff
73 lines
2.7 KiB
Diff
From 11d58d4a43939ccd6f0ab3e4bf762c6a9bc8e0a7 Mon Sep 17 00:00:00 2001
|
|
From: Eric covener <covener@apache.org>
|
|
Date: Mon, 20 Mar 2023 05:33:57 AM GMT+0800
|
|
Subject: [PATCH] mod_mime: Do not match the extention against possible query string
|
|
parameters in case ProxyPass was used with the nocanon option.
|
|
|
|
Conflict:NA
|
|
Reference:https://github.com/apache/httpd/commit/11d58d4a43939ccd6f0ab3e4bf762c6a9bc8e0a7
|
|
|
|
---
|
|
modules/http/mod_mime.c | 15 ++++++++++++++-
|
|
modules/proxy/proxy_util.c | 7 ++++---
|
|
2 files changed, 18 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/modules/http/mod_mime.c b/modules/http/mod_mime.c
|
|
index 03d1c41..700f824 100644
|
|
--- a/modules/http/mod_mime.c
|
|
+++ b/modules/http/mod_mime.c
|
|
@@ -755,7 +755,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) {
|
|
@@ -775,6 +775,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;
|
|
}
|
|
diff --git a/modules/proxy/proxy_util.c b/modules/proxy/proxy_util.c
|
|
index 3d324cb..d824fb0 100644
|
|
--- a/modules/proxy/proxy_util.c
|
|
+++ b/modules/proxy/proxy_util.c
|
|
@@ -266,12 +266,13 @@ PROXY_DECLARE(char *)ap_proxy_canonenc(apr_pool_t *p, const char *x, int len,
|
|
return NULL;
|
|
}
|
|
ch = ap_proxy_hex2c(&x[i + 1]);
|
|
- i += 2;
|
|
if (ch != 0 && strchr(reserved, ch)) { /* keep it encoded */
|
|
- ap_proxy_c2hex(ch, &y[j]);
|
|
- j += 2;
|
|
+ y[j++] = x[i++];
|
|
+ y[j++] = x[i++];
|
|
+ y[j] = x[i];
|
|
continue;
|
|
}
|
|
+ i += 2;
|
|
}
|
|
/* recode it, if necessary */
|
|
if (!apr_isalnum(ch) && !strchr(allowed, ch)) {
|
|
--
|
|
2.33.0
|
|
|
|
|