aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2023-05-17 08:48:03 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2023-05-17 10:47:41 +0000
commitdfa32dcec82c0916124661788cf527c5bdb68c1c (patch)
treed862444f3891b4e99db33981dacdff7c9ef2189b
parent2368bbdfd7032f1d7f74c036a5bf14854015c835 (diff)
PySide6: Prevent crash when connecting to temporary signal sources
Add a check to the connect function. Fixes: PYSIDE-2328 Change-Id: I62a10ef5710487f8ab23cc46c1cc4a34fab5e2b1 Reviewed-by: Shyamnath Premnadh <Shyamnath.Premnadh@qt.io> (cherry picked from commit 9af348ae68363fefea62d75d508812bafc71ccf8) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--sources/pyside6/libpyside/pysidesignal.cpp5
-rw-r--r--sources/pyside6/tests/QtCore/destroysignal_test.py7
2 files changed, 11 insertions, 1 deletions
diff --git a/sources/pyside6/libpyside/pysidesignal.cpp b/sources/pyside6/libpyside/pysidesignal.cpp
index 17071cd1d..ad2a42802 100644
--- a/sources/pyside6/libpyside/pysidesignal.cpp
+++ b/sources/pyside6/libpyside/pysidesignal.cpp
@@ -441,6 +441,11 @@ static PyObject *signalInstanceConnect(PyObject *self, PyObject *args, PyObject
PyErr_Format(PyExc_RuntimeError, "cannot connect uninitialized SignalInstance");
return nullptr;
}
+ if (source->deleted) {
+ PyErr_Format(PyExc_RuntimeError, "Signal source has been deleted");
+ return nullptr;
+ }
+
Shiboken::AutoDecRef pyArgs(PyList_New(0));
bool match = false;
diff --git a/sources/pyside6/tests/QtCore/destroysignal_test.py b/sources/pyside6/tests/QtCore/destroysignal_test.py
index f1d7cfec1..ad087b489 100644
--- a/sources/pyside6/tests/QtCore/destroysignal_test.py
+++ b/sources/pyside6/tests/QtCore/destroysignal_test.py
@@ -57,7 +57,7 @@ class Foo(QObject):
self.s.emit(i)
-# PYSIDE-2201: This crashed until we introduced a weak reference.
+# PYSIDE-2201/2328: This crashed until we introduced a weak reference.
class TestDestroyNoConnect(unittest.TestCase):
def testSignalDestroyedMissingReference(self):
@@ -67,6 +67,11 @@ class TestDestroyNoConnect(unittest.TestCase):
with self.assertRaises(RuntimeError):
Foo().s.emit(44)
+ def testSignalDestroyedinConnect(self):
+ # PYSIDE-2328: Connect to signal of temporary
+ with self.assertRaises(RuntimeError):
+ Foo().s.connect(None)
+
if __name__ == '__main__':
unittest.main()