From: Graham Leggett Date: Fri, 23 Nov 2018 16:10:51 +0000 (+0000) Subject: *) mod_setenvif: We can have expressions that become true if a regex pattern X-Git-Tag: 2.4.38~63 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bb6d355f54dcd9e41e76bf3744b73de63bc8c365;p=thirdparty%2Fapache%2Fhttpd.git *) mod_setenvif: We can have expressions that become true if a regex pattern in the expression does NOT match. In this case val is NULL and we should just set the value for the environment variable like in the pattern case. +1: jailletc36, jim, minfrin git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1847292 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index 11e102e1717..4e1cbb3abe2 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,11 @@ -*- coding: utf-8 -*- Changes with Apache 2.4.38 + *) mod_setenvif: We can have expressions that become true if a regex pattern + in the expression does NOT match. In this case val is NULL + and we should just set the value for the environment variable + like in the pattern case. [Christophe Jaillet] + *) mod_dav: Fix invalid Location header when a resource is created by passing an absolute URI on the request line [Jim Jagielski] diff --git a/STATUS b/STATUS index af0aafc9e38..e78976bd5f3 100644 --- a/STATUS +++ b/STATUS @@ -126,15 +126,6 @@ RELEASE SHOWSTOPPERS: PATCHES ACCEPTED TO BACKPORT FROM TRUNK: [ start all new proposals below, under PATCHES PROPOSED. ] - *) mod_setenvif: We can have expressions that become true if a regex pattern - in the expression does NOT match. In this case val is NULL - and we should just set the value for the environment variable - like in the pattern case. - trunk patch: http://svn.apache.org/r1786235 - 2.4.x patch: svn merge -c 1786235 ^/httpd/httpd/trunk . - +1: jailletc36, jim, minfrin - jailletc36: Test-case added in r1845094 - PATCHES PROPOSED TO BACKPORT FROM TRUNK: [ New proposals should be added at the end of the list ] diff --git a/modules/metadata/mod_setenvif.c b/modules/metadata/mod_setenvif.c index c56ef503187..23d60cdba5a 100644 --- a/modules/metadata/mod_setenvif.c +++ b/modules/metadata/mod_setenvif.c @@ -597,7 +597,17 @@ static int match_headers(request_rec *r) apr_table_unset(r->subprocess_env, elts[j].key); } else { - if (!b->pattern) { + /* + * Do regex replacement, if we did not use a pattern, so + * either a regex or an expression and if we have a val + * or at least we did not use an expression. + * Background: We can have expressions that become true + * if a regex pattern in the expression does NOT match. + * In this case val is NULL and we should just set the + * value for the environment variable like in the pattern + * case. + */ + if (!b->pattern && (val || !b->expr)) { char *replaced = ap_pregsub(r->pool, elts[j].val, val, AP_MAX_REG_MATCH, regm); if (replaced) {