mirror of
https://github.com/python/cpython.git
synced 2025-11-26 13:22:51 +00:00
check to make sure the attribute is a string (#14334)
This commit is contained in:
parent
3fb05a90ce
commit
16d84ac355
3 changed files with 13 additions and 0 deletions
|
|
@ -4393,6 +4393,9 @@ order (MRO) for bases """
|
||||||
|
|
||||||
self.assertRaises(AttributeError, getattr, EvilGetattribute(), "attr")
|
self.assertRaises(AttributeError, getattr, EvilGetattribute(), "attr")
|
||||||
|
|
||||||
|
def test_type___getattribute__(self):
|
||||||
|
self.assertRaises(TypeError, type.__getattribute__, list, type)
|
||||||
|
|
||||||
def test_abstractmethods(self):
|
def test_abstractmethods(self):
|
||||||
# type pretends not to have __abstractmethods__.
|
# type pretends not to have __abstractmethods__.
|
||||||
self.assertRaises(AttributeError, getattr, type, "__abstractmethods__")
|
self.assertRaises(AttributeError, getattr, type, "__abstractmethods__")
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,9 @@ What's New in Python 3.2.4
|
||||||
Core and Builtins
|
Core and Builtins
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
- 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
|
- Issue #1469629: Allow cycles through an object's __dict__ slot to be
|
||||||
collected. (For example if ``x.__dict__ is x``).
|
collected. (For example if ``x.__dict__ is x``).
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2462,6 +2462,13 @@ type_getattro(PyTypeObject *type, PyObject *name)
|
||||||
PyObject *meta_attribute, *attribute;
|
PyObject *meta_attribute, *attribute;
|
||||||
descrgetfunc meta_get;
|
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) */
|
/* Initialize this type (we'll assume the metatype is initialized) */
|
||||||
if (type->tp_dict == NULL) {
|
if (type->tp_dict == NULL) {
|
||||||
if (PyType_Ready(type) < 0)
|
if (PyType_Ready(type) < 0)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue