From 0852c7dd52ac42e7843ddfef44571494e4c86070 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 22 Jan 2020 21:53:26 +0100 Subject: [PATCH] bpo-39406: os.putenv() avoids putenv_dict on Windows (GH-18126) Windows: _wputenv(env) copies the *env* string and doesn't require the caller to manage the variable memory. --- Modules/posixmodule.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index e0eecfa6d1143e..71b99fd836f152 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -819,7 +819,9 @@ dir_fd_converter(PyObject *o, void *p) } } -#ifdef HAVE_PUTENV +/* Windows: _wputenv(env) copies the *env* string and doesn't require the + caller to manage the variable memory. */ +#if defined(HAVE_PUTENV) && !defined(MS_WINDOWS) # define PY_PUTENV_DICT #endif @@ -10130,8 +10132,10 @@ os_putenv_impl(PyObject *module, PyObject *name, PyObject *value) posix_error(); goto error; } + /* _wputenv(env) copies the *env* string and doesn't require the caller + to manage the variable memory. */ + Py_DECREF(unicode); - posix_putenv_dict_setitem(name, unicode); Py_RETURN_NONE; error: