[Python-checkins] cpython (2.7): check to make sure the attribute is a string (#14334)

benjamin.peterson python-checkins at python.org
Fri Mar 16 15:46:32 CET 2012


http://hg.python.org/cpython/rev/d1cf6008a565
changeset:   75740:d1cf6008a565
branch:      2.7
parent:      75726:bab9f29c93fd
user:        Benjamin Peterson <benjamin at python.org>
date:        Fri Mar 16 09:32:59 2012 -0500
summary:
  check to make sure the attribute is a string (#14334)

files:
  Lib/test/test_descr.py |  3 +++
  Misc/NEWS              |  3 +++
  Objects/typeobject.c   |  7 +++++++
  3 files changed, 13 insertions(+), 0 deletions(-)


diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py
--- a/Lib/test/test_descr.py
+++ b/Lib/test/test_descr.py
@@ -4554,6 +4554,9 @@
 
         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
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -9,6 +9,9 @@
 Core and Builtins
 -----------------
 
+- Issue #14334: Prevent in a segfault in type.__getattribute__ when it was not
+  passed strings.
+
 - Issue #14161: fix the __repr__ of file objects to escape the file name.
 
 - Issue #1469629: Allow cycles through an object's __dict__ slot to be
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -2530,6 +2530,13 @@
     PyObject *meta_attribute, *attribute;
     descrgetfunc meta_get;
 
+    if (!PyString_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)

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list