]> granicus.if.org Git - apache/commitdiff
* We can have expressions that become true if a regex pattern in the expression
authorRuediger Pluem <rpluem@apache.org>
Thu, 9 Mar 2017 20:21:19 +0000 (20:21 +0000)
committerRuediger Pluem <rpluem@apache.org>
Thu, 9 Mar 2017 20:21:19 +0000 (20:21 +0000)
  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.

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

modules/metadata/mod_setenvif.c

index c56ef503187723f558325fa4cb0843d0912a02be..23d60cdba5ac81a357c421b024a0e7a5ccc4a8ba 100644 (file)
@@ -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) {