Index: Modules/posixmodule.c =================================================================== --- Modules/posixmodule.c (révision 66894) +++ Modules/posixmodule.c (copie de travail) @@ -342,6 +342,25 @@ extern char **environ; #endif /* !_MSC_VER */ +static void +_Py_unsetenv(const char *var) +{ +#ifdef MS_WINDOWS + wchar_t **ep = _wenviron, **dp; +#else + char **ep = environ, **dp; +#endif + while (*ep != NULL) { + if (strcmp (*ep, var) != 0) { + ++ep; + continue; + } + for(dp=ep; *dp != NULL; dp++) { + dp[0] = dp[1]; + } + } +} + static PyObject * convertenviron(void) { @@ -369,17 +388,21 @@ PyObject *k; PyObject *v; wchar_t *p = wcschr(*e, L'='); - if (p == NULL) + if (p == NULL) { + _Py_unsetenv(*e); continue; + } k = PyUnicode_FromWideChar(*e, (Py_ssize_t)(p-*e)); if (k == NULL) { PyErr_Clear(); + _Py_unsetenv(*e); continue; } v = PyUnicode_FromWideChar(p+1, wcslen(p+1)); if (v == NULL) { PyErr_Clear(); Py_DECREF(k); + _Py_unsetenv(*e); continue; } if (PyDict_GetItem(d, k) == NULL) { @@ -397,17 +420,21 @@ PyObject *k; PyObject *v; char *p = strchr(*e, '='); - if (p == NULL) + if (p == NULL) { + _Py_unsetenv(*e); continue; + } k = PyUnicode_FromStringAndSize(*e, (int)(p-*e)); if (k == NULL) { PyErr_Clear(); + _Py_unsetenv(*e); continue; } v = PyUnicode_FromString(p+1); if (v == NULL) { PyErr_Clear(); Py_DECREF(k); + _Py_unsetenv(*e); continue; } if (PyDict_GetItem(d, k) == NULL) {