mirror of
https://github.com/python/cpython.git
synced 2024-11-23 18:04:37 +08:00
SF bug #541883 (Vincent Fiack).
A stupid bug in object_set_class(): didn't check for value==NULL before checking its type. Bugfix candidate.
This commit is contained in:
parent
d1c08f33f2
commit
b6b8942f53
@ -2352,6 +2352,12 @@ def setclass():
|
||||
pass
|
||||
else:
|
||||
raise TestFailed, "shouldn't allow %r.__class__ = %r" % (x, C)
|
||||
try:
|
||||
delattr(x, "__class__")
|
||||
except TypeError:
|
||||
pass
|
||||
else:
|
||||
raise TestFailed, "shouldn't allow del %r.__class__" % x
|
||||
cant(C(), list)
|
||||
cant(list(), C)
|
||||
cant(C(), 1)
|
||||
|
@ -1605,6 +1605,11 @@ object_set_class(PyObject *self, PyObject *value, void *closure)
|
||||
PyTypeObject *old = self->ob_type;
|
||||
PyTypeObject *new, *newbase, *oldbase;
|
||||
|
||||
if (value == NULL) {
|
||||
PyErr_SetString(PyExc_TypeError,
|
||||
"can't delete __class__ attribute");
|
||||
return -1;
|
||||
}
|
||||
if (!PyType_Check(value)) {
|
||||
PyErr_Format(PyExc_TypeError,
|
||||
"__class__ must be set to new-style class, not '%s' object",
|
||||
|
Loading…
Reference in New Issue
Block a user