mirror of
https://github.com/pybind/pybind11.git
synced 2025-02-20 23:49:18 +00:00
Fix segfault when repr() with pybind11 type with metaclass (#571)
* Fixed a regression that was introduced in the PyPy patch: use ht_qualname_meta instead of ht_qualname to fix PyHeapTypeObject->ht_qualname field. * Added a qualname/repr test that works in both Python 3.3+ and previous versions
This commit is contained in:
parent
87f893b766
commit
c40d8c617f
@ -701,7 +701,7 @@ protected:
|
||||
|
||||
#if PY_MAJOR_VERSION >= 3 && PY_MINOR_VERSION >= 3
|
||||
/* Qualified names for Python >= 3.3 */
|
||||
type->ht_qualname = ht_qualname.release().ptr();
|
||||
type->ht_qualname = ht_qualname_meta.release().ptr();
|
||||
#endif
|
||||
type->ht_type.tp_name = strdup(meta_name_.c_str());
|
||||
type->ht_type.tp_base = &PyType_Type;
|
||||
|
@ -3,6 +3,12 @@ import pytest
|
||||
from pybind11_tests import ExamplePythonTypes, ConstructorStats, has_optional, has_exp_optional
|
||||
|
||||
|
||||
def test_repr():
|
||||
# In Python 3.3+, repr() accesses __qualname__
|
||||
assert "ExamplePythonTypes__Meta" in repr(type(ExamplePythonTypes))
|
||||
assert "ExamplePythonTypes" in repr(ExamplePythonTypes)
|
||||
|
||||
|
||||
def test_static():
|
||||
ExamplePythonTypes.value = 15
|
||||
assert ExamplePythonTypes.value == 15
|
||||
|
Loading…
Reference in New Issue
Block a user