diff options
Diffstat (limited to 'Python/sysmodule.c')
-rw-r--r-- | Python/sysmodule.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/Python/sysmodule.c b/Python/sysmodule.c index 78b9d22821..b6bdf51bce 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -2919,7 +2919,7 @@ err_occurred: infrastructure for the io module in place. Use UTF-8/surrogateescape and ignore EAGAIN errors. */ -PyStatus +static PyStatus _PySys_SetPreliminaryStderr(PyObject *sysdict) { PyObject *pstderr = PyFile_NewStdPrinter(fileno(stderr)); @@ -2946,11 +2946,13 @@ error: PyStatus _PySys_Create(PyThreadState *tstate, PyObject **sysmod_p) { + assert(!_PyErr_Occurred(tstate)); + PyInterpreterState *interp = tstate->interp; PyObject *modules = PyDict_New(); if (modules == NULL) { - return _PyStatus_ERR("can't make modules dictionary"); + goto error; } interp->modules = modules; @@ -2961,13 +2963,13 @@ _PySys_Create(PyThreadState *tstate, PyObject **sysmod_p) PyObject *sysdict = PyModule_GetDict(sysmod); if (sysdict == NULL) { - return _PyStatus_ERR("can't initialize sys dict"); + goto error; } Py_INCREF(sysdict); interp->sysdict = sysdict; if (PyDict_SetItemString(sysdict, "modules", interp->modules) < 0) { - return _PyStatus_ERR("can't initialize sys module"); + goto error; } PyStatus status = _PySys_SetPreliminaryStderr(sysdict); @@ -2980,10 +2982,17 @@ _PySys_Create(PyThreadState *tstate, PyObject **sysmod_p) return status; } - _PyImport_FixupBuiltin(sysmod, "sys", interp->modules); + if (_PyImport_FixupBuiltin(sysmod, "sys", interp->modules) < 0) { + goto error; + } + + assert(!_PyErr_Occurred(tstate)); *sysmod_p = sysmod; return _PyStatus_OK(); + +error: + return _PyStatus_ERR("can't initialize sys module"); } |