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.
diff --git a/Objects/classobject.c b/Objects/classobject.c
index bb17df1..9cca19f 100644
--- a/Objects/classobject.c
+++ b/Objects/classobject.c
@@ -1866,21 +1866,8 @@
{
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;
}