Index: Modules/posixmodule.c =================================================================== --- Modules/posixmodule.c (révision 66894) +++ Modules/posixmodule.c (copie de travail) @@ -342,6 +342,20 @@ extern char **environ; #endif /* !_MSC_VER */ +static void +_Py_unsetenv( +#ifdef MS_WINDOWS + wchar_t **ep +#else + char **ep +#endif +) +{ + for(; *ep != NULL; ep++) { + ep[0] = ep[1]; + } +} + static PyObject * convertenviron(void) { @@ -365,21 +379,25 @@ if (_wenviron == NULL) return d; /* This part ignores errors */ - for (e = _wenviron; *e != NULL; e++) { + for (e = _wenviron; *e != NULL;) { 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) { @@ -388,26 +406,31 @@ } Py_DECREF(k); Py_DECREF(v); + e++; } #else if (environ == NULL) return d; /* This part ignores errors */ - for (e = environ; *e != NULL; e++) { + for (e = environ; *e != NULL;) { 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) { @@ -416,6 +439,7 @@ } Py_DECREF(k); Py_DECREF(v); + e++; } #endif #if defined(PYOS_OS2)