raise TypeError when PyObject_Get/SetAttr called with non-string name

This commit is contained in:
Jeremy Hylton 2000-06-23 14:36:32 +00:00
parent 8caad49c30
commit 99a8f90874

View file

@ -600,8 +600,13 @@ PyObject_GetAttr(v, name)
{ {
if (v->ob_type->tp_getattro != NULL) if (v->ob_type->tp_getattro != NULL)
return (*v->ob_type->tp_getattro)(v, name); return (*v->ob_type->tp_getattro)(v, name);
else
return PyObject_GetAttrString(v, PyString_AsString(name)); if (!PyString_Check(name)) {
PyErr_SetString(PyExc_TypeError,
"attribute name must be string");
return NULL;
}
return PyObject_GetAttrString(v, PyString_AS_STRING(name));
} }
int int
@ -626,12 +631,19 @@ PyObject_SetAttr(v, name, value)
{ {
int err; int err;
Py_INCREF(name); Py_INCREF(name);
PyString_InternInPlace(&name); if (PyString_Check(name))
PyString_InternInPlace(&name);
if (v->ob_type->tp_setattro != NULL) if (v->ob_type->tp_setattro != NULL)
err = (*v->ob_type->tp_setattro)(v, name, value); err = (*v->ob_type->tp_setattro)(v, name, value);
else else if (PyString_Check(name)) {
err = PyObject_SetAttrString( err = PyObject_SetAttrString(
v, PyString_AsString(name), value); v, PyString_AS_STRING(name), value);
}
else {
PyErr_SetString(PyExc_TypeError,
"attribute name must be string");
err = -1;
}
Py_DECREF(name); Py_DECREF(name);
return err; return err;
} }