[pypy-issue] Issue #2491: cpyext-defined types with custom __qualname__ getset descriptors error on PyType_Ready (pypy/pypy)

CFSworks issues-reply at bitbucket.org
Thu Mar 9 09:46:06 EST 2017


New issue 2491: cpyext-defined types with custom __qualname__ getset descriptors error on PyType_Ready
https://bitbucket.org/pypy/pypy/issues/2491/cpyext-defined-types-with-custom

CFSworks:

Certain CPython-API generating binding layers (the one I have in mind right now is Cython) may stick custom __qualname__ getset descriptors in their defined types.

In CPython 3, this is allowed. The __qualname__-is-str check only occurs on type.__new__, so PyType_Ready'd custom types can bypass this check and include a custom descriptor if they'd like. In PyPy 3's cpyext, the C structs are flattened down to a dict and passed into the W_TypeObject constructor, which itself enforces the __qualname__ type check (which should, by the way, have a far more helpful error than "TypeError: expected string, got getset_descriptor object").

This should be resolved by not filtering __qualname__ out of dict_w when cpyext creates a type.




More information about the pypy-issue mailing list