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:
Guido van Rossum 2002-04-15 01:03:30 +00:00
parent d1c08f33f2
commit b6b8942f53
2 changed files with 11 additions and 0 deletions

View File

@ -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)

View File

@ -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",