Commit: 953f07503aa695009aab729370e458dc26784a8b Author: Xinchen Hui <larue...@php.net> Fri, 29 Mar 2013 23:42:50 +0800 Parents: b2a760fe4564fc6f24e1596f3288617a12aa2c55 Branches: PHP-5.5
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=953f07503aa695009aab729370e458dc26784a8b Log: Fixed bug #64544 (Valgrind warnings after using putenv) The frozen_envion is needed, since if an item in environ is updated (like the test script HOME one), invalid free still shows up Bugs: https://bugs.php.net/64544 Changed paths: M NEWS M sapi/cli/ps_title.c A sapi/cli/tests/bug64544.phpt Diff: diff --git a/NEWS b/NEWS index c1cd3e1..c8b7116 100644 --- a/NEWS +++ b/NEWS @@ -6,6 +6,7 @@ PHP NEWS 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 diff --git a/sapi/cli/ps_title.c b/sapi/cli/ps_title.c index 730a31b..28830c9 100644 --- a/sapi/cli/ps_title.c +++ b/sapi/cli/ps_title.c @@ -128,7 +128,7 @@ static char** save_argv; * 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 @@ -182,7 +182,8 @@ char** save_ps_args(int argc, char** argv) * 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++) { @@ -192,6 +193,7 @@ char** save_ps_args(int argc, char** argv) } new_environ[i] = NULL; environ = new_environ; + memcpy((char *)frozen_environ, (char *)new_environ, sizeof(char *) * (i + 1)); } #endif /* PS_USE_CLOBBER_ARGV */ @@ -409,9 +411,9 @@ void cleanup_ps_args(char **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 */ diff --git a/sapi/cli/tests/bug64544.phpt b/sapi/cli/tests/bug64544.phpt new file mode 100644 index 0000000..cc49545 --- /dev/null +++ b/sapi/cli/tests/bug64544.phpt @@ -0,0 +1,20 @@ +--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" -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php