aboutsummaryrefslogtreecommitdiffstats
path: root/sources/pyside6/libpyside/pysideproperty.cpp
diff options
context:
space:
mode:
authorChristian Tismer <tismer@stackless.com>2023-01-04 12:25:54 +0100
committerChristian Tismer <tismer@stackless.com>2023-01-06 11:37:47 +0100
commitc4076d430ed2a9ca24e3da6cbaec2f432f931b2e (patch)
tree0e399b50447cf05bdb143a6020387e3372d88177 /sources/pyside6/libpyside/pysideproperty.cpp
parent1e3ec1ba2a29e59b580fbd9a5cf6e4e91c8994e2 (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.cpp27
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;