bpo-43973: object_set_class() checks Py_TPFLAGS_IMMUTABLETYPE (GH-25714)

Use Py_TPFLAGS_IMMUTABLETYPE to check for class assignments.
This commit is contained in:
Erlend Egeberg Aasland 2021-04-30 12:07:02 +02:00 committed by GitHub
parent 069e81ab3d
commit b73b5fb9ea
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -4737,10 +4737,10 @@ object_set_class(PyObject *self, PyObject *value, void *closure)
*/
if (!(PyType_IsSubtype(newto, &PyModule_Type) &&
PyType_IsSubtype(oldto, &PyModule_Type)) &&
(!(newto->tp_flags & Py_TPFLAGS_HEAPTYPE) ||
!(oldto->tp_flags & Py_TPFLAGS_HEAPTYPE))) {
(_PyType_HasFeature(newto, Py_TPFLAGS_IMMUTABLETYPE) ||
_PyType_HasFeature(oldto, Py_TPFLAGS_IMMUTABLETYPE))) {
PyErr_Format(PyExc_TypeError,
"__class__ assignment only supported for heap types "
"__class__ assignment only supported for mutable types "
"or ModuleType subclasses");
return -1;
}