From: William A. Rowe Jr Date: Thu, 5 Jun 2008 19:00:31 +0000 (+0000) Subject: The environment may be manipulated by modules such as mod_perl, so regenerate X-Git-Tag: 2.3.0~547 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=74d535b29dc54d9fa99b5c17cddafa7eb02b9d6f;p=apache The environment may be manipulated by modules such as mod_perl, so regenerate the passed env argument on each CreateProcess call. PR: 44800 (part 2/3) Submitted by: tdonovan git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@663699 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/server/mpm/winnt/mpm_winnt.c b/server/mpm/winnt/mpm_winnt.c index 4ba94c6b47..990e40897e 100644 --- a/server/mpm/winnt/mpm_winnt.c +++ b/server/mpm/winnt/mpm_winnt.c @@ -561,7 +561,6 @@ static int create_process(apr_pool_t *p, HANDLE *child_proc, HANDLE *child_exit_ /* These NEVER change for the lifetime of this parent */ static char **args = NULL; - static char **env = NULL; static char pidbuf[28]; apr_status_t rv; @@ -572,6 +571,8 @@ static int create_process(apr_pool_t *p, HANDLE *child_proc, HANDLE *child_exit_ HANDLE waitlist[2]; /* see waitlist_e */ char *cmd; char *cwd; + char **env; + int envc; apr_pool_create_ex(&ptemp, p, NULL, NULL); @@ -640,21 +641,15 @@ static int create_process(apr_pool_t *p, HANDLE *child_proc, HANDLE *child_exit_ return -1; } - if (!env) - { - /* Build the env array, only once since it won't change - * for the lifetime of this parent process. - */ - int envc; - for (envc = 0; _environ[envc]; ++envc) { - ; - } - env = malloc((envc + 2) * sizeof (char*)); - memcpy(env, _environ, envc * sizeof (char*)); - apr_snprintf(pidbuf, sizeof(pidbuf), "AP_PARENT_PID=%i", parent_pid); - env[envc] = pidbuf; - env[envc + 1] = NULL; + /* Build the env array */ + for (envc = 0; _environ[envc]; ++envc) { + ; } + env = apr_palloc(ptemp, (envc + 2) * sizeof (char*)); + memcpy(env, _environ, envc * sizeof (char*)); + apr_snprintf(pidbuf, sizeof(pidbuf), "AP_PARENT_PID=%i", parent_pid); + env[envc] = pidbuf; + env[envc + 1] = NULL; rv = apr_proc_create(&new_child, cmd, args, env, attr, ptemp); if (rv != APR_SUCCESS) {