Kaydet (Commit) b6b8942f authored tarafından Guido van Rossum's avatar Guido van Rossum

SF bug #541883 (Vincent Fiack).

A stupid bug in object_set_class(): didn't check for value==NULL
before checking its type.

Bugfix candidate.
üst d1c08f33
......@@ -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",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment