Commit 173a1495 authored by Jeff Trawick's avatar Jeff Trawick
Browse files

Handle filter names which include capital letters.

PR: 40323


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@440028 13f79535-47bb-0310-9956-ffa450edef68
parent 9605b864
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -2,6 +2,9 @@
Changes with Apache 2.3.0
  [Remove entries to the current 2.0 and 2.2 section below, when backported]
  *) mod_ext_filter: Handle filter names which include capital letters.
     PR 40323.  [Jeff Trawick]
  *) mod_deflate: Rework inflate output and deflate output filter to fix several
     issues: Incorrect handling of flush buckets, potential memory leaks,
     excessive memory usage in inflate output filter for large compressed
+12 −2
Original line number Diff line number Diff line
@@ -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)) {