aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2024-02-01 13:40:29 +0100
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2024-02-01 21:54:47 +0100
commitf77f2f36dc1017e88d3776c0564c4760c338c389 (patch)
treef69a4444910850e02ca97fec4700350c83090527
parentdf372c292524a8d0813ac917bc8ce77c0a0803de (diff)
PySide6: Fix callable invocations
- Always make sure to decref the result by using AutoDecref. - Check whether the callback passed to QAbstractOAuth::setModifyParametersFunction() really returns a dict. - Fix bool return of the callback passed to QWebEngineCookieStore::setCookieFilter(). - Some code cosmetics Amends f56329c995d4a708d4169ef52f819b38de1810b0, 535a781d534f4c9d102342a9813528e48c576ffd, 96715550f3d980dc5554c67a3660e94b6a9a3e76, cd394249fc77063a2bd6ba7a7633fdbc10621475, 5fac301e8e5a8d15eaff91d78b5deeeb2204c7b4, Task-number: PYSIDE-1612 Task-number: PYSIDE-1815 Task-number: PYSIDE-1912 Task-number: PYSIDE-2234 Pick-to: 6.5 Change-Id: I180ed4dfa63fe8ac06a898492244a85ed926c2d6 Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io> (cherry picked from commit f6538d29fbd7d216ce00cdc2870c3a1055a24d26) Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Adrian Herrmann <adrian.herrmann@qt.io>
-rw-r--r--sources/pyside6/PySide6/glue/qtcore.cpp6
-rw-r--r--sources/pyside6/PySide6/glue/qtnetworkauth.cpp16
-rw-r--r--sources/pyside6/PySide6/glue/qtwebenginecore.cpp14
-rw-r--r--sources/pyside6/PySide6/glue/qtwebenginewidgets.cpp6
4 files changed, 22 insertions, 20 deletions
diff --git a/sources/pyside6/PySide6/glue/qtcore.cpp b/sources/pyside6/PySide6/glue/qtcore.cpp
index 6d51f337f..a687d8447 100644
--- a/sources/pyside6/PySide6/glue/qtcore.cpp
+++ b/sources/pyside6/PySide6/glue/qtcore.cpp
@@ -1920,7 +1920,7 @@ auto callback = [callable]() -> void
return;
}
Shiboken::GilState state;
- PyObject_CallObject(callable, nullptr);
+ Shiboken::AutoDecRef ret(PyObject_CallObject(callable, nullptr));
Py_DECREF(callable);
};
Py_INCREF(callable);
@@ -2007,9 +2007,9 @@ auto callback = [callable, count, arg_qpermission](const QPermission &permission
if (arg_qpermission) {
Shiboken::AutoDecRef arglist(PyTuple_New(1));
PyTuple_SET_ITEM(arglist.object(), 0, %CONVERTTOPYTHON[QPermission](permission));
- PyObject_CallObject(callable, arglist);
+ Shiboken::AutoDecRef ret(PyObject_CallObject(callable, arglist));
} else {
- PyObject_CallObject(callable, nullptr);
+ Shiboken::AutoDecRef ret(PyObject_CallObject(callable, nullptr));
}
Py_DECREF(callable);
};
diff --git a/sources/pyside6/PySide6/glue/qtnetworkauth.cpp b/sources/pyside6/PySide6/glue/qtnetworkauth.cpp
index e22569e2e..f390605d2 100644
--- a/sources/pyside6/PySide6/glue/qtnetworkauth.cpp
+++ b/sources/pyside6/PySide6/glue/qtnetworkauth.cpp
@@ -16,13 +16,15 @@ auto callback = [callable](QAbstractOAuth::Stage stage, QMultiMap<QString, QVari
PyTuple_SET_ITEM(arglist, 1, %CONVERTTOPYTHON[QMultiMap<QString, QVariant>](dict));
Shiboken::AutoDecRef ret(PyObject_CallObject(callable, arglist));
- PyObject *key;
- PyObject *value;
- Py_ssize_t pos = 0;
- while (PyDict_Next(ret, &pos, &key, &value)) {
- QString cppKey = %CONVERTTOCPP[QString](key);
- QVariant cppValue = %CONVERTTOCPP[QVariant](value);
- dictPointer->replace(cppKey, cppValue);
+ if (!ret.isNull() && PyDict_Check(ret.object()) != 0) {
+ PyObject *key{};
+ PyObject *value{};
+ Py_ssize_t pos = 0;
+ while (PyDict_Next(ret.object(), &pos, &key, &value)) {
+ QString cppKey = %CONVERTTOCPP[QString](key);
+ QVariant cppValue = %CONVERTTOCPP[QVariant](value);
+ dictPointer->replace(cppKey, cppValue);
+ }
}
Py_DECREF(callable);
diff --git a/sources/pyside6/PySide6/glue/qtwebenginecore.cpp b/sources/pyside6/PySide6/glue/qtwebenginecore.cpp
index a569e6c11..0a0a00ec8 100644
--- a/sources/pyside6/PySide6/glue/qtwebenginecore.cpp
+++ b/sources/pyside6/PySide6/glue/qtwebenginecore.cpp
@@ -10,11 +10,11 @@ auto callback = [callable](const QWebEngineCookieStore::FilterRequest& filterReq
PyTuple_SET_ITEM(arglist, 0,
%CONVERTTOPYTHON[QWebEngineCookieStore::FilterRequest](filterRequest));
Py_INCREF(callable);
- PyObject* ret = PyObject_CallObject(callable, arglist);
+ Shiboken::AutoDecRef ret(PyObject_CallObject(callable, arglist));
Py_DECREF(callable);
- return ret;
-
+ return ret.object() == Py_True;
};
+
%CPPSELF.%FUNCTION_NAME(callback);
// @snippet qwebenginecookiestore-setcookiefilter
@@ -24,13 +24,13 @@ auto callback = [callable](std::unique_ptr<QWebEngineNotification> webEngineNoti
{
Shiboken::GilState state;
Shiboken::AutoDecRef arglist(PyTuple_New(1));
+ auto *notification = webEngineNotification.release();
PyTuple_SET_ITEM(arglist.object(), 0,
- Shiboken::Conversions::pointerToPython(
- SbkPySide6_QtWebEngineCoreTypes[SBK_QWEBENGINENOTIFICATION_IDX],
- webEngineNotification.release()));
+ %CONVERTTOPYTHON[QWebEngineNotification*](notification));
Py_INCREF(callable);
- PyObject_CallObject(callable, arglist);
+ Shiboken::AutoDecRef ret(PyObject_CallObject(callable, arglist));
Py_DECREF(callable);
};
+
%CPPSELF.%FUNCTION_NAME(callback);
// @snippet qwebengineprofile-setnotificationpresenter
diff --git a/sources/pyside6/PySide6/glue/qtwebenginewidgets.cpp b/sources/pyside6/PySide6/glue/qtwebenginewidgets.cpp
index 8fdd6b693..af15130a4 100644
--- a/sources/pyside6/PySide6/glue/qtwebenginewidgets.cpp
+++ b/sources/pyside6/PySide6/glue/qtwebenginewidgets.cpp
@@ -55,8 +55,8 @@ auto callback = [callable](const QString &text)
PyTuple_SET_ITEM(arglist, 0, %CONVERTTOPYTHON[QString](text));
Shiboken::AutoDecRef ret(PyObject_CallObject(callable, arglist));
Py_DECREF(callable);
-
};
+
Py_INCREF(callable);
%CPPSELF.%FUNCTION_NAME(callback);
// @snippet qwebenginepage-convertto
@@ -95,8 +95,8 @@ auto callback = [callable](const QVariant &result)
// PyTuple_SET_ITEM(arglist, 0, %CONVERTTOPYTHON[bool](found));
Shiboken::AutoDecRef ret(PyObject_CallObject(callable, arglist));
Py_DECREF(callable);
-
};
+
Py_INCREF(callable);
%CPPSELF.%FUNCTION_NAME(%1, %2, callback);
// @snippet qwebenginepage-runjavascript
@@ -114,8 +114,8 @@ auto callback = [callable](const QByteArray &pdf)
PyTuple_SET_ITEM(arglist, 0, %CONVERTTOPYTHON[QByteArray](pdf));
Shiboken::AutoDecRef ret(PyObject_CallObject(callable, arglist));
Py_DECREF(callable);
-
};
+
Py_INCREF(callable);
%CPPSELF.%FUNCTION_NAME(callback, %2);
// @snippet qwebenginepage-printtopdf