Tighten the tests for assignment to __bases__: disallow empty tuple.

This commit is contained in:
Guido van Rossum 2002-12-13 17:49:38 +00:00
parent 3d87e3cdf7
commit 3bbc0eea10
2 changed files with 14 additions and 0 deletions

View file

@ -3485,6 +3485,14 @@ def test_mutable_bases():
else:
raise TestFailed, "shouldn't be able to delete .__bases__"
try:
D.__bases__ = ()
except TypeError, msg:
if str(msg) == "a new-style class can't have only classic bases":
raise TestFailed, "wrong error message for .__bases__ = ()"
else:
raise TestFailed, "shouldn't be able to set .__bases__ to ()"
try:
D.__bases__ = (D,)
except TypeError:

View file

@ -211,6 +211,12 @@ type_set_bases(PyTypeObject *type, PyObject *value, void *context)
type->tp_name, value->ob_type->tp_name);
return -1;
}
if (PyTuple_GET_SIZE(value) == 0) {
PyErr_Format(PyExc_TypeError,
"can only assign non-empty tuple to %s.__bases__, not ()",
type->tp_name);
return -1;
}
for (i = 0; i < PyTuple_GET_SIZE(value); i++) {
ob = PyTuple_GET_ITEM(value, i);
if (!PyClass_Check(ob) && !PyType_Check(ob)) {