summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Peterson <benjamin@python.org>2012-03-16 14:35:38 (GMT)
committerBenjamin Peterson <benjamin@python.org>2012-03-16 14:35:38 (GMT)
commitde394543b4d31c0226fd8700475adccf6a3eb934 (patch)
tree07bd78cd2fa7643f72b20f7fededc6da15ee45f3
parent6e335250987a1b200c4d68979586677fbcd00f4e (diff)
parent16d84ac355c532a1e7d25cf75e0b577923de2856 (diff)
downloadcpython-de394543b4d31c0226fd8700475adccf6a3eb934.zip
cpython-de394543b4d31c0226fd8700475adccf6a3eb934.tar.gz
cpython-de394543b4d31c0226fd8700475adccf6a3eb934.tar.bz2
merge 3.2 (#14334)
-rw-r--r--Lib/test/test_descr.py3
-rw-r--r--Misc/NEWS3
-rw-r--r--Objects/typeobject.c7
3 files changed, 13 insertions, 0 deletions
diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py
index f405fbb..bf82a88 100644
--- a/Lib/test/test_descr.py
+++ b/Lib/test/test_descr.py
@@ -4400,6 +4400,9 @@ order (MRO) for bases """
self.assertRaises(AttributeError, getattr, EvilGetattribute(), "attr")
+ def test_type___getattribute__(self):
+ self.assertRaises(TypeError, type.__getattribute__, list, type)
+
def test_abstractmethods(self):
# type pretends not to have __abstractmethods__.
self.assertRaises(AttributeError, getattr, type, "__abstractmethods__")
diff --git a/Misc/NEWS b/Misc/NEWS
index 7843459..470ab42 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,9 @@ Core and Builtins
- Give the ast.AST class a __dict__.
+- Issue #14334: Prevent in a segfault in type.__getattribute__ when it was not
+ passed strings.
+
- Issue #1469629: Allow cycles through an object's __dict__ slot to be
collected. (For example if ``x.__dict__ is x``).
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index 4487322..db0b042 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -2486,6 +2486,13 @@ type_getattro(PyTypeObject *type, PyObject *name)
PyObject *meta_attribute, *attribute;
descrgetfunc meta_get;
+ if (!PyUnicode_Check(name)) {
+ PyErr_Format(PyExc_TypeError,
+ "attribute name must be string, not '%.200s'",
+ name->ob_type->tp_name);
+ return NULL;
+ }
+
/* Initialize this type (we'll assume the metatype is initialized) */
if (type->tp_dict == NULL) {
if (PyType_Ready(type) < 0)