summaryrefslogtreecommitdiff
path: root/ext/standard/basic_functions.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/standard/basic_functions.c')
-rw-r--r--ext/standard/basic_functions.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c
index 18d799fdd3..3106022f3d 100644
--- a/ext/standard/basic_functions.c
+++ b/ext/standard/basic_functions.c
@@ -886,6 +886,13 @@ zend_module_entry basic_functions_module = {
static void php_putenv_destructor(putenv_entry *pe)
{
if (pe->previous_value) {
+#if _MSC_VER >= 1300
+ /* VS.Net has a bug in putenv() when setting a variable that
+ * is already set; if the SetEnvironmentVariable() API call
+ * fails, the Crt will double free() a string.
+ * We try to avoid this by setting our own value first */
+ SetEnvironmentVariable(pe->key, "bugbug");
+#endif
putenv(pe->previous_value);
} else {
# if HAVE_UNSETENV