@@ -7292,7 +7292,7 @@ parse_envlist(PyObject* env, Py_ssize_t *envc_ptr)
72927292{
72937293 Py_ssize_t i, pos, envc;
72947294 PyObject *keys = NULL, *vals = NULL;
7295- PyObject *key, *val, *key2, *val2, *keyval ;
7295+ PyObject *key = NULL , *val = NULL , *key2 = NULL , *val2 = NULL ;
72967296 EXECV_CHAR **envlist;
72977297
72987298 i = PyMapping_Size(env);
@@ -7332,14 +7332,9 @@ parse_envlist(PyObject* env, Py_ssize_t *envc_ptr)
73327332
73337333#if defined(HAVE_WEXECV) || defined(HAVE_WSPAWNV)
73347334 if (!PyUnicode_FSDecoder(key, &key2)) {
7335- Py_DECREF(key);
7336- Py_DECREF(val);
73377335 goto error;
73387336 }
73397337 if (!PyUnicode_FSDecoder(val, &val2)) {
7340- Py_DECREF(key);
7341- Py_DECREF(val);
7342- Py_DECREF(key2);
73437338 goto error;
73447339 }
73457340 /* Search from index 1 because on Windows starting '=' is allowed for
@@ -7348,50 +7343,38 @@ parse_envlist(PyObject* env, Py_ssize_t *envc_ptr)
73487343 PyUnicode_FindChar(key2, '=', 1, PyUnicode_GET_LENGTH(key2), 1) != -1)
73497344 {
73507345 PyErr_SetString(PyExc_ValueError, "illegal environment variable name");
7351- Py_DECREF(key);
7352- Py_DECREF(val);
7353- Py_DECREF(key2);
7354- Py_DECREF(val2);
73557346 goto error;
73567347 }
7357- keyval = PyUnicode_FromFormat("%U=%U", key2, val2);
7348+ PyObject * keyval = PyUnicode_FromFormat("%U=%U", key2, val2);
73587349#else
73597350 if (!PyUnicode_FSConverter(key, &key2)) {
7360- Py_DECREF(key);
7361- Py_DECREF(val);
73627351 goto error;
73637352 }
73647353 if (!PyUnicode_FSConverter(val, &val2)) {
7365- Py_DECREF(key);
7366- Py_DECREF(val);
7367- Py_DECREF(key2);
73687354 goto error;
73697355 }
73707356 if (PyBytes_GET_SIZE(key2) == 0 ||
73717357 strchr(PyBytes_AS_STRING(key2) + 1, '=') != NULL)
73727358 {
73737359 PyErr_SetString(PyExc_ValueError, "illegal environment variable name");
7374- Py_DECREF(key);
7375- Py_DECREF(val);
7376- Py_DECREF(key2);
7377- Py_DECREF(val2);
73787360 goto error;
73797361 }
7380- keyval = PyBytes_FromFormat("%s=%s", PyBytes_AS_STRING(key2),
7381- PyBytes_AS_STRING(val2));
7382- #endif
7383- Py_DECREF(key);
7384- Py_DECREF(val);
7385- Py_DECREF(key2);
7386- Py_DECREF(val2);
7387- if (!keyval)
7362+ PyObject *keyval = PyBytes_FromFormat("%s=%s", PyBytes_AS_STRING(key2),
7363+ PyBytes_AS_STRING(val2));
7364+ #endif
7365+ if (!keyval) {
73887366 goto error;
7367+ }
73897368
73907369 if (!fsconvert_strdup(keyval, &envlist[envc++])) {
73917370 Py_DECREF(keyval);
73927371 goto error;
73937372 }
73947373
7374+ Py_CLEAR(key);
7375+ Py_CLEAR(val);
7376+ Py_CLEAR(key2);
7377+ Py_CLEAR(val2);
73957378 Py_DECREF(keyval);
73967379 }
73977380 Py_DECREF(vals);
@@ -7402,6 +7385,10 @@ parse_envlist(PyObject* env, Py_ssize_t *envc_ptr)
74027385 return envlist;
74037386
74047387error:
7388+ Py_XDECREF(key);
7389+ Py_XDECREF(val);
7390+ Py_XDECREF(key2);
7391+ Py_XDECREF(val2);
74057392 Py_XDECREF(keys);
74067393 Py_XDECREF(vals);
74077394 free_string_array(envlist, envc);
0 commit comments