Commit 99a8f908 authored by Jeremy Hylton's avatar Jeremy Hylton

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

parent 8caad49c
...@@ -600,8 +600,13 @@ PyObject_GetAttr(v, name) ...@@ -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) ...@@ -626,12 +631,19 @@ PyObject_SetAttr(v, name, value)
{ {
int err; int err;
Py_INCREF(name); Py_INCREF(name);
if (PyString_Check(name))
PyString_InternInPlace(&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;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment