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
|
pass
|
||||||
else:
|
else:
|
||||||
raise TestFailed, "shouldn't allow %r.__class__ = %r" % (x, C)
|
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(C(), list)
|
||||||
cant(list(), C)
|
cant(list(), C)
|
||||||
cant(C(), 1)
|
cant(C(), 1)
|
||||||
|
|
|
@ -1605,6 +1605,11 @@ object_set_class(PyObject *self, PyObject *value, void *closure)
|
||||||
PyTypeObject *old = self->ob_type;
|
PyTypeObject *old = self->ob_type;
|
||||||
PyTypeObject *new, *newbase, *oldbase;
|
PyTypeObject *new, *newbase, *oldbase;
|
||||||
|
|
||||||
|
if (value == NULL) {
|
||||||
|
PyErr_SetString(PyExc_TypeError,
|
||||||
|
"can't delete __class__ attribute");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
if (!PyType_Check(value)) {
|
if (!PyType_Check(value)) {
|
||||||
PyErr_Format(PyExc_TypeError,
|
PyErr_Format(PyExc_TypeError,
|
||||||
"__class__ must be set to new-style class, not '%s' object",
|
"__class__ must be set to new-style class, not '%s' object",
|
||||||
|
|
Loading…
Reference in New Issue