From: Hank Ibell Date: Wed, 5 Dec 2018 19:13:38 +0000 (+0000) Subject: core: Fix incorrect substitution of env vars in directives containing multiple env... X-Git-Tag: 2.5.0-alpha2-ci-test-only~2237 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fc7fcd0d04c3c61830f3802780974eb3a5d4de2d;p=thirdparty%2Fapache%2Fhttpd.git core: Fix incorrect substitution of env vars in directives containing multiple env vars. In ap_resolve_env(), the string returned from getenv() should be copied since the returned string may be statically allocated. This fixes an issue where the value for the last env var is substituted for all env vars in a directive containing multiple env vars. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1848236 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index 31d44bc20bb..032f68ac8df 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,9 @@ -*- coding: utf-8 -*- Changes with Apache 2.5.1 + *) core: Incorrect values for environment variables are substituted when + multiple environment variables are specified in a directive. [Hank Ibell] + *) core: Split out the ability to parse wildcard files and directories from the Include/IncludeOptional directives into a generic set of functions ap_dir_nofnmatch() and ap_dir_fnmatch(). [Graham Leggett] diff --git a/server/core.c b/server/core.c index 92245b3d646..2ada06ab3cc 100644 --- a/server/core.c +++ b/server/core.c @@ -1441,7 +1441,7 @@ AP_DECLARE(const char *) ap_resolve_env(apr_pool_t *p, const char * word) if (server_config_defined_vars) word = apr_table_get(server_config_defined_vars, name); if (!word) - word = getenv(name); + word = apr_pstrdup(p, getenv(name)); if (word) { current->string = word; current->len = strlen(word);