Message302331
The following code causes an assertion failure:
import ctypes
class BadStruct(ctypes.Structure):
_fields_ = []
_anonymous_ = ['foo']
foo = None
this is because MakeAnonFields() (in Modules/_ctypes/stgdict.c) goes over the
names specified in _anonymous_, and looks each name up in the class by calling
PyObject_GetAttr().
in case an attribute of such a name is found (i.e. PyObject_GetAttr() succeeded),
MakeAnonFields() assumes that the attribute was created by MakeFields(), so it
asserts the type of the attribute is PyCField_Type.
however, PyObject_GetAttr() would succeed also in case it is a normal attribute
specified by the user, but isn't specified in _fields_, as in the code above.
in such a case, the type of the attribute is not PyCField_Type, and so the
assertion fails. |
|
Date |
User |
Action |
Args |
2017-09-16 09:57:38 | Oren Milman | set | recipients:
+ Oren Milman |
2017-09-16 09:57:38 | Oren Milman | set | messageid: <1505555858.95.0.114491369101.issue31490@psf.upfronthosting.co.za> |
2017-09-16 09:57:38 | Oren Milman | link | issue31490 messages |
2017-09-16 09:57:38 | Oren Milman | create | |
|