Mercurial > cpython-lru_cache-weakref
diff Python/bltinmodule.c @ 18888:f12e1a766a14 legacy-trunk
Fix for SF byg [ #420304 ] getattr function w/ default
Fix suggested by Michael Hudson: Raise TypeError if attribute name
passed to getattr() is not a string or Unicode. There is some
unfortunate duplication of code between builtin_getattr() and
PyObject_GetAttr(), but it appears to be unavoidable.
| author | Jeremy Hylton <jeremy@alum.mit.edu> |
|---|---|
| date | Mon, 30 Jul 2001 22:39:31 +0000 |
| parents | 22456d0ee737 |
| children | fb837c5ae5d3 |
line wrap: on
line diff
--- a/Python/bltinmodule.c Mon Jul 30 22:34:24 2001 +0000 +++ b/Python/bltinmodule.c Mon Jul 30 22:39:31 2001 +0000 @@ -890,6 +890,17 @@ if (!PyArg_ParseTuple(args, "OO|O:getattr", &v, &name, &dflt)) return NULL; + if (PyUnicode_Check(name)) { + name = _PyUnicode_AsDefaultEncodedString(name, NULL); + if (name == NULL) + return NULL; + } + + if (!PyString_Check(name)) { + PyErr_SetString(PyExc_TypeError, + "attribute name must be string"); + return NULL; + } result = PyObject_GetAttr(v, name); if (result == NULL && dflt != NULL) { PyErr_Clear();
