[Python-checkins] bpo-38631: Replace tp_new_wrapper() fatal error with SystemError (GH-18262)

Victor Stinner webhook-mailer at python.org
Thu Jan 30 03:02:56 EST 2020

commit: 2bf127d97bd1d60ead7c20d429b0c61ef61fc554
branch: master
author: Victor Stinner <vstinner at python.org>
committer: GitHub <noreply at github.com>
date: 2020-01-30T09:02:49+01:00

bpo-38631: Replace tp_new_wrapper() fatal error with SystemError (GH-18262)

tp_new_wrapper() now raises a SystemError if called with non-type
self, rather than calling Py_FatalError() which cannot be catched.

M Objects/typeobject.c

diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index b095e2921dcf2..8422a3c5a38c4 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -6042,8 +6042,12 @@ tp_new_wrapper(PyObject *self, PyObject *args, PyObject *kwds)
     PyTypeObject *type, *subtype, *staticbase;
     PyObject *arg0, *res;
-    if (self == NULL || !PyType_Check(self))
-        Py_FatalError("__new__() called with non-type 'self'");
+    if (self == NULL || !PyType_Check(self)) {
+        PyErr_Format(PyExc_SystemError,
+                     "__new__() called with non-type 'self'");
+        return NULL;
+    }
     type = (PyTypeObject *)self;
     if (!PyTuple_Check(args) || PyTuple_GET_SIZE(args) < 1) {

More information about the Python-checkins mailing list