diff options
| author | Christian Tismer <tismer@stackless.com> | 2023-01-04 12:25:54 +0100 |
|---|---|---|
| committer | Christian Tismer <tismer@stackless.com> | 2023-01-06 11:37:47 +0100 |
| commit | c4076d430ed2a9ca24e3da6cbaec2f432f931b2e (patch) | |
| tree | 0e399b50447cf05bdb143a6020387e3372d88177 /sources/pyside6/libpyside/pysideproperty.cpp | |
| parent | 1e3ec1ba2a29e59b580fbd9a5cf6e4e91c8994e2 (diff) | |
property/QML: Improve handling of an unknown class name
pysideproperty has Q_ASSERT calls, which cause errors when
a typename is undefined. This behavior is inconsistent and
should either raise an exception or be circumvented.
For compatibility with another implementation, unknown
types are now ignored, and debug and release are consistent.
To obtain an error, run the script with -Werrors . This makes
use of the new exception delay feature.
Task-number: PYSIDE-2160
Change-Id: Ia320edab4b51dd6f6b94a429b8f1f086ce9897f7
Pick-to: 6.4 6.2
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
Diffstat (limited to 'sources/pyside6/libpyside/pysideproperty.cpp')
| -rw-r--r-- | sources/pyside6/libpyside/pysideproperty.cpp | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/sources/pyside6/libpyside/pysideproperty.cpp b/sources/pyside6/libpyside/pysideproperty.cpp index a4f90b8fd..1961f566e 100644 --- a/sources/pyside6/libpyside/pysideproperty.cpp +++ b/sources/pyside6/libpyside/pysideproperty.cpp @@ -137,20 +137,29 @@ void PySidePropertyPrivate::metaCall(PyObject *source, QMetaObject::Call call, v { switch (call) { case QMetaObject::ReadProperty: { - Shiboken::Conversions::SpecificConverter converter(typeName); - Q_ASSERT(converter); - if (PyObject *value = getValue(source)) { - converter.toCpp(value, args[0]); - Py_DECREF(value); + AutoDecRef value(getValue(source)); + auto *obValue = value.object(); + if (obValue) { + Conversions::SpecificConverter converter(typeName); + if (converter) { + converter.toCpp(obValue, args[0]); + } else { + // PYSIDE-2160: Report an unknown type name to the caller `qtPropertyMetacall`. + PyErr_SetObject(PyExc_StopIteration, obValue); + } } } break; case QMetaObject::WriteProperty: { - Shiboken::Conversions::SpecificConverter converter(typeName); - Q_ASSERT(converter); - Shiboken::AutoDecRef value(converter.toPython(args[0])); - setValue(source, value); + Conversions::SpecificConverter converter(typeName); + if (converter) { + AutoDecRef value(converter.toPython(args[0])); + setValue(source, value); + } else { + // PYSIDE-2160: Report an unknown type name to the caller `qtPropertyMetacall`. + PyErr_SetNone(PyExc_StopIteration); + } } break; |
