28 Mar 2013, PHP 5.5.0 Beta 2
- Core:
+ . Fixed bug #64544 (Valgrind warnings after using putenv). (Laruence)
. Fixed bug #64515 (Memoryleak when using the same variablename 2times in
function declaration). (Laruence)
. Fixed bug #64503 (Compilation fails with error: conflicting types for
* This holds the 'locally' allocated environ from the save_ps_args method.
* This is subsequently free'd at exit.
*/
-static char** new_environ;
+static char** frozen_environ, **new_environ;
/*
* Call this method early, before any code has used the original argv passed in
* move the environment out of the way
*/
new_environ = (char **) malloc((i + 1) * sizeof(char *));
- if (!new_environ)
+ frozen_environ = (char **) malloc((i + 1) * sizeof(char *));
+ if (!new_environ || !frozen_environ)
goto clobber_error;
for (i = 0; environ[i] != NULL; i++)
{
}
new_environ[i] = NULL;
environ = new_environ;
+ memcpy((char *)frozen_environ, (char *)new_environ, sizeof(char *) * (i + 1));
}
#endif /* PS_USE_CLOBBER_ARGV */
#ifdef PS_USE_CLOBBER_ARGV
{
int i;
- for (i = 0; new_environ[i] != NULL; i++)
- free(new_environ[i]);
- free(new_environ);
+ for (i = 0; frozen_environ[i] != NULL; i++)
+ free(frozen_environ[i]);
+ free(frozen_environ);
}
#endif /* PS_USE_CLOBBER_ARGV */
--- /dev/null
+--TEST--
+Bug #64544 (Valgrind warnings after using putenv)
+--SKIPIF--
+<?php
+if (substr(PHP_OS, 0, 3) == "WIN") {
+ die("skip non windows test");
+}
+?>
+--FILE--
+<?php
+
+putenv("HOME=/tmp");
+var_dump(getenv("HOME"));
+
+putenv("FOO=BAR");
+var_dump(getenv("FOO"));
+?>
+--EXPECTF--
+string(4) "/tmp"
+string(3) "BAR"