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();