◐ Shell
clean mode source ↗

The `new_interpreter()` function incorrectly returns `_PyStatus_OK()` on some error code paths

Skip to content

Navigation Menu

Sign in

Appearance settings

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

Appearance settings

Closed

@colesbury

Description

Bug report

The following code paths should probably returns some sort of exception status (possibly _PyStatus_NO_MEMORY()).

cpython/Python/pylifecycle.c

Lines 2084 to 2088 in a1551b4

PyInterpreterState *interp = PyInterpreterState_New();
if (interp == NULL) {
*tstate_p = NULL;
return _PyStatus_OK();
}

cpython/Python/pylifecycle.c

Lines 2090 to 2096 in a1551b4

PyThreadState *tstate = _PyThreadState_New(interp,
_PyThreadState_WHENCE_INTERP);
if (tstate == NULL) {
PyInterpreterState_Delete(interp);
*tstate_p = NULL;
return _PyStatus_OK();
}

Note that PyInterpreterState_New() currently never returns NULL -- it calls Py_FatalError() instead -- but we should probably still handle that case as well.

_PyThreadState_New can return NULL when out of memory.

cc @ericsnowcurrently

Linked PRs

Metadata

Metadata

Assignees

No one assigned

    No fields configured for issues without a type.

    Projects

    Status

    Done

    Milestone

    No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions