Commit 7c2dfc35 authored by Martin v. Löwis's avatar Martin v. Löwis

Patch #517521: Consider byte strings before Unicode strings

in PyObject_Get/SetAttr.
parent c339b9ab
...@@ -1085,6 +1085,7 @@ PyObject_GetAttr(PyObject *v, PyObject *name) ...@@ -1085,6 +1085,7 @@ PyObject_GetAttr(PyObject *v, PyObject *name)
{ {
PyTypeObject *tp = v->ob_type; PyTypeObject *tp = v->ob_type;
if (!PyString_Check(name)) {
#ifdef Py_USING_UNICODE #ifdef Py_USING_UNICODE
/* The Unicode to string conversion is done here because the /* The Unicode to string conversion is done here because the
existing tp_getattro slots expect a string object as name existing tp_getattro slots expect a string object as name
...@@ -1096,11 +1097,12 @@ PyObject_GetAttr(PyObject *v, PyObject *name) ...@@ -1096,11 +1097,12 @@ PyObject_GetAttr(PyObject *v, PyObject *name)
} }
else else
#endif #endif
if (!PyString_Check(name)) { {
PyErr_SetString(PyExc_TypeError, PyErr_SetString(PyExc_TypeError,
"attribute name must be string"); "attribute name must be string");
return NULL; return NULL;
} }
}
if (tp->tp_getattro != NULL) if (tp->tp_getattro != NULL)
return (*tp->tp_getattro)(v, name); return (*tp->tp_getattro)(v, name);
if (tp->tp_getattr != NULL) if (tp->tp_getattr != NULL)
...@@ -1129,6 +1131,7 @@ PyObject_SetAttr(PyObject *v, PyObject *name, PyObject *value) ...@@ -1129,6 +1131,7 @@ PyObject_SetAttr(PyObject *v, PyObject *name, PyObject *value)
PyTypeObject *tp = v->ob_type; PyTypeObject *tp = v->ob_type;
int err; int err;
if (!PyString_Check(name)){
#ifdef Py_USING_UNICODE #ifdef Py_USING_UNICODE
/* The Unicode to string conversion is done here because the /* The Unicode to string conversion is done here because the
existing tp_setattro slots expect a string object as name existing tp_setattro slots expect a string object as name
...@@ -1140,11 +1143,12 @@ PyObject_SetAttr(PyObject *v, PyObject *name, PyObject *value) ...@@ -1140,11 +1143,12 @@ PyObject_SetAttr(PyObject *v, PyObject *name, PyObject *value)
} }
else else
#endif #endif
if (!PyString_Check(name)){ {
PyErr_SetString(PyExc_TypeError, PyErr_SetString(PyExc_TypeError,
"attribute name must be string"); "attribute name must be string");
return -1; return -1;
} }
}
else else
Py_INCREF(name); Py_INCREF(name);
...@@ -1217,6 +1221,7 @@ PyObject_GenericGetAttr(PyObject *obj, PyObject *name) ...@@ -1217,6 +1221,7 @@ PyObject_GenericGetAttr(PyObject *obj, PyObject *name)
descrgetfunc f; descrgetfunc f;
PyObject **dictptr; PyObject **dictptr;
if (!PyString_Check(name)){
#ifdef Py_USING_UNICODE #ifdef Py_USING_UNICODE
/* The Unicode to string conversion is done here because the /* The Unicode to string conversion is done here because the
existing tp_setattro slots expect a string object as name existing tp_setattro slots expect a string object as name
...@@ -1228,11 +1233,12 @@ PyObject_GenericGetAttr(PyObject *obj, PyObject *name) ...@@ -1228,11 +1233,12 @@ PyObject_GenericGetAttr(PyObject *obj, PyObject *name)
} }
else else
#endif #endif
if (!PyString_Check(name)){ {
PyErr_SetString(PyExc_TypeError, PyErr_SetString(PyExc_TypeError,
"attribute name must be string"); "attribute name must be string");
return NULL; return NULL;
} }
}
else else
Py_INCREF(name); Py_INCREF(name);
...@@ -1291,6 +1297,7 @@ PyObject_GenericSetAttr(PyObject *obj, PyObject *name, PyObject *value) ...@@ -1291,6 +1297,7 @@ PyObject_GenericSetAttr(PyObject *obj, PyObject *name, PyObject *value)
PyObject **dictptr; PyObject **dictptr;
int res = -1; int res = -1;
if (!PyString_Check(name)){
#ifdef Py_USING_UNICODE #ifdef Py_USING_UNICODE
/* The Unicode to string conversion is done here because the /* The Unicode to string conversion is done here because the
existing tp_setattro slots expect a string object as name existing tp_setattro slots expect a string object as name
...@@ -1302,11 +1309,12 @@ PyObject_GenericSetAttr(PyObject *obj, PyObject *name, PyObject *value) ...@@ -1302,11 +1309,12 @@ PyObject_GenericSetAttr(PyObject *obj, PyObject *name, PyObject *value)
} }
else else
#endif #endif
if (!PyString_Check(name)){ {
PyErr_SetString(PyExc_TypeError, PyErr_SetString(PyExc_TypeError,
"attribute name must be string"); "attribute name must be string");
return -1; return -1;
} }
}
else else
Py_INCREF(name); Py_INCREF(name);
......
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