From: Graham Leggett Date: Thu, 12 Oct 2006 22:34:40 +0000 (+0000) Subject: mod_ext_filter: Handle filter names which include capital letters. X-Git-Tag: 2.2.4~126 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a1a90c05e89807e428af0d1d2fae7c10604ea6cd;p=thirdparty%2Fapache%2Fhttpd.git mod_ext_filter: Handle filter names which include capital letters. PR 40323. +1: trawick, rpluem, jim git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.2.x@463477 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index 691ec1b5b94..e2e07734e71 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,9 @@ -*- coding: utf-8 -*- Changes with Apache 2.2.4 + *) mod_ext_filter: Handle filter names which include capital letters. + PR 40323. [Jeff Trawick] + *) mod_isapi: Avoid double trailing slashes in HSE_REQ_MAP_URL_TO_PATH support. Also corrects the slashes for Windows. PR 15993. [William Rowe] diff --git a/STATUS b/STATUS index ab40786adae..5d503229a3e 100644 --- a/STATUS +++ b/STATUS @@ -77,12 +77,6 @@ RELEASE SHOWSTOPPERS: PATCHES ACCEPTED TO BACKPORT FROM TRUNK: [ start all new proposals below, under PATCHES PROPOSED. ] - * mod_ext_filter: Handle filter names which include capital letters. - PR 40323. - Trunk patch, which applies: - http://svn.apache.org/viewvc?view=rev&revision=440028 - +1: trawick, rpluem, jim - * core: Deal with the widespread use of apr_status_t return values as HTTP status codes, as documented in PR#31759 (a bug shared by the default handler, mod_cgi, mod_cgid, mod_proxy, and probably diff --git a/modules/filters/mod_ext_filter.c b/modules/filters/mod_ext_filter.c index 27c70fafcfa..78c9f90d5ef 100644 --- a/modules/filters/mod_ext_filter.c +++ b/modules/filters/mod_ext_filter.c @@ -206,6 +206,7 @@ static const char *define_filter(cmd_parms *cmd, void *dummy, const char *args) &ext_filter_module); const char *token; const char *name; + char *normalized_name; ef_filter_t *filter; name = ap_getword_white(cmd->pool, &args); @@ -213,7 +214,16 @@ static const char *define_filter(cmd_parms *cmd, void *dummy, const char *args) return "Filter name not found"; } - if (apr_hash_get(conf->h, name, APR_HASH_KEY_STRING)) { + /* During request processing, we find information about the filter + * by looking up the filter name provided by core server in our + * hash table. But the core server has normalized the filter + * name by converting it to lower case. Thus, when adding the + * filter to our hash table we have to use lower case as well. + */ + normalized_name = apr_pstrdup(cmd->pool, name); + ap_str_tolower(normalized_name); + + if (apr_hash_get(conf->h, normalized_name, APR_HASH_KEY_STRING)) { return apr_psprintf(cmd->pool, "ExtFilter %s is already defined", name); } @@ -222,7 +232,7 @@ static const char *define_filter(cmd_parms *cmd, void *dummy, const char *args) filter->name = name; filter->mode = OUTPUT_FILTER; filter->ftype = AP_FTYPE_RESOURCE; - apr_hash_set(conf->h, name, APR_HASH_KEY_STRING, filter); + apr_hash_set(conf->h, normalized_name, APR_HASH_KEY_STRING, filter); while (*args) { while (apr_isspace(*args)) {