Skip to content

Commit 17b706f

Browse files
committed
simplify error handling
1 parent 243b880 commit 17b706f

File tree

1 file changed

+15
-28
lines changed

1 file changed

+15
-28
lines changed

Modules/posixmodule.c

Lines changed: 15 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -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

74047387
error:
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

Comments
 (0)