Commit 6fef0f1a authored by Serhiy Storchaka's avatar Serhiy Storchaka Committed by GitHub

bpo-35445: Do not ignore memory errors when create posix.environ. (GH-11049)

parent 72ff7b4c
Memory errors during creating posix.environ no longer ignored.
......@@ -1356,62 +1356,52 @@ convertenviron(void)
/* _wenviron must be initialized in this way if the program is started
through main() instead of wmain(). */
_wgetenv(L"");
if (_wenviron == NULL)
e = _wenviron;
#else
e = environ;
#endif
if (e == NULL)
return d;
/* This part ignores errors */
for (e = _wenviron; *e != NULL; e++) {
for (; *e != NULL; e++) {
PyObject *k;
PyObject *v;
#ifdef MS_WINDOWS
const wchar_t *p = wcschr(*e, L'=');
if (p == NULL)
continue;
k = PyUnicode_FromWideChar(*e, (Py_ssize_t)(p-*e));
if (k == NULL) {
PyErr_Clear();
continue;
}
v = PyUnicode_FromWideChar(p+1, wcslen(p+1));
if (v == NULL) {
PyErr_Clear();
Py_DECREF(k);
continue;
}
if (PyDict_GetItem(d, k) == NULL) {
if (PyDict_SetItem(d, k, v) != 0)
PyErr_Clear();
}
Py_DECREF(k);
Py_DECREF(v);
}
#else
if (environ == NULL)
return d;
/* This part ignores errors */
for (e = environ; *e != NULL; e++) {
PyObject *k;
PyObject *v;
const char *p = strchr(*e, '=');
#endif
if (p == NULL)
continue;
#ifdef MS_WINDOWS
k = PyUnicode_FromWideChar(*e, (Py_ssize_t)(p-*e));
#else
k = PyBytes_FromStringAndSize(*e, (int)(p-*e));
#endif
if (k == NULL) {
PyErr_Clear();
continue;
Py_DECREF(d);
return NULL;
}
#ifdef MS_WINDOWS
v = PyUnicode_FromWideChar(p+1, wcslen(p+1));
#else
v = PyBytes_FromStringAndSize(p+1, strlen(p+1));
#endif
if (v == NULL) {
PyErr_Clear();
Py_DECREF(k);
continue;
Py_DECREF(d);
return NULL;
}
if (PyDict_GetItem(d, k) == NULL) {
if (PyDict_SetItem(d, k, v) != 0)
PyErr_Clear();
if (PyDict_GetItemWithError(d, k) == NULL) {
if (PyErr_Occurred() || PyDict_SetItem(d, k, v) != 0) {
Py_DECREF(v);
Py_DECREF(k);
Py_DECREF(d);
return NULL;
}
}
Py_DECREF(k);
Py_DECREF(v);
}
#endif
return d;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment