diff options
-rw-r--r-- | Modules/stdwinmodule.c | 27 | ||||
-rw-r--r-- | Modules/sunaudiodev.c | 6 | ||||
-rw-r--r-- | Objects/classobject.c | 18 | ||||
-rw-r--r-- | Objects/moduleobject.c | 11 | ||||
-rw-r--r-- | Objects/xxobject.c | 9 |
5 files changed, 56 insertions, 15 deletions
diff --git a/Modules/stdwinmodule.c b/Modules/stdwinmodule.c index e33610d..8b3812b 100644 --- a/Modules/stdwinmodule.c +++ b/Modules/stdwinmodule.c @@ -1051,8 +1051,13 @@ text_setattr(tp, name, v) if (tp->t_attr == NULL) return -1; } - if (v == NULL) - return dictremove(tp->t_attr, name); + if (v == NULL) { + int rv = dictremove(tp->t_attr, name); + if (rv < 0) + err_setstr(AttributeError, + "delete non-existing text object attribute"); + return rv; + } else return dictinsert(tp->t_attr, name, v); } @@ -1253,8 +1258,13 @@ menu_setattr(mp, name, v) if (mp->m_attr == NULL) return -1; } - if (v == NULL) - return dictremove(mp->m_attr, name); + if (v == NULL) { + int rv = dictremove(mp->m_attr, name); + if (rv < 0) + err_setstr(AttributeError, + "delete non-existing menu object attribute"); + return rv; + } else return dictinsert(mp->m_attr, name, v); } @@ -1655,8 +1665,13 @@ window_setattr(wp, name, v) if (wp->w_attr == NULL) return -1; } - if (v == NULL) - return dictremove(wp->w_attr, name); + if (v == NULL) { + int rv = dictremove(wp->w_attr, name); + if (rv < 0) + err_setstr(AttributeError, + "delete non-existing menu object attribute"); + return rv; + } else return dictinsert(wp->w_attr, name, v); } diff --git a/Modules/sunaudiodev.c b/Modules/sunaudiodev.c index 0cf5613..d02041a 100644 --- a/Modules/sunaudiodev.c +++ b/Modules/sunaudiodev.c @@ -343,6 +343,12 @@ sads_setattr(xp, name, v) char *name; object *v; { + + if (v == NULL) { + err_setstr(TypeError, + "can't delete sun audio status attributes"); + return NULL; + } return setmember((char *)&xp->ai, sads_ml, name, v); } diff --git a/Objects/classobject.c b/Objects/classobject.c index 19f887c..514869c 100644 --- a/Objects/classobject.c +++ b/Objects/classobject.c @@ -133,8 +133,13 @@ class_setattr(op, name, v) return -1; } } - if (v == NULL) - return dictremove(op->cl_methods, name); + if (v == NULL) { + int rv = dictremove(op->cl_methods, name); + if (rv < 0) + err_setstr(AttributeError, + "delete non-existing class attribute"); + return rv; + } else return dictinsert(op->cl_methods, name, v); } @@ -245,8 +250,13 @@ instance_setattr(inst, name, v) return -1; } } - if (v == NULL) - return dictremove(inst->in_attr, name); + if (v == NULL) { + int rv = dictremove(inst->in_attr, name); + if (rv < 0) + err_setstr(AttributeError, + "delete non-existing instance attribute"); + return rv; + } else return dictinsert(inst->in_attr, name, v); } diff --git a/Objects/moduleobject.c b/Objects/moduleobject.c index bbe927c..aedba35 100644 --- a/Objects/moduleobject.c +++ b/Objects/moduleobject.c @@ -132,11 +132,16 @@ module_setattr(m, name, v) object *v; { if (strcmp(name, "__dict__") == 0 || strcmp(name, "__name__") == 0) { - err_setstr(TypeError, "can't assign to reserved member name"); + err_setstr(TypeError, "read-only special attribute"); return -1; } - if (v == NULL) - return dictremove(m->md_dict, name); + if (v == NULL) { + int rv = dictremove(m->md_dict, name); + if (rv < 0) + err_setstr(AttributeError, + "delete non-existing module attribute"); + return rv; + } else return dictinsert(m->md_dict, name, v); } diff --git a/Objects/xxobject.c b/Objects/xxobject.c index 7ab7a73..8471893 100644 --- a/Objects/xxobject.c +++ b/Objects/xxobject.c @@ -110,8 +110,13 @@ xx_setattr(xp, name, v) if (xp->x_attr == NULL) return -1; } - if (v == NULL) - return dictremove(xp->x_attr, name); + if (v == NULL) { + int rv = dictremove(xp->x_attr, name); + if (rv < 0) + err_setstr(AttributeError, + "delete non-existing xx attribute"); + return rv; + } else return dictinsert(xp->x_attr, name, v); } |