instancemethod_setattro(): Raise TypeError if an attempt is made to

set a function attribute on a method (either bound or unbound).  This
reverts to Python 2.0 behavior that no attributes of the method are
writable, but provides a more informative error message.
This commit is contained in:
Barry Warsaw 2001-02-26 18:09:15 +00:00
parent c1e100f215
commit 4f9b13bac8
1 changed files with 2 additions and 15 deletions

View File

@ -1866,21 +1866,8 @@ instancemethod_setattro(register PyMethodObject *im, PyObject *name,
{
char *sname = PyString_AsString(name);
if (PyEval_GetRestricted() ||
strcmp(sname, "im_func") == 0 ||
strcmp(sname, "im_self") == 0 ||
strcmp(sname, "im_class") == 0)
{
PyErr_Format(PyExc_TypeError, "read-only attribute: %s",
sname);
return -1;
}
if (im->im_self != NULL) {
PyErr_Format(PyExc_TypeError,
"cannot set attributes through bound methods");
return -1;
}
return PyObject_SetAttr(im->im_func, name, v);
PyErr_Format(PyExc_TypeError, "read-only attribute: %s", sname);
return -1;
}