From 9af348ae68363fefea62d75d508812bafc71ccf8 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 17 May 2023 08:48:03 +0200 Subject: PySide6: Prevent crash when connecting to temporary signal sources Add a check to the connect function. Pick-to: 6.5 Fixes: PYSIDE-2328 Change-Id: I62a10ef5710487f8ab23cc46c1cc4a34fab5e2b1 Reviewed-by: Shyamnath Premnadh --- sources/pyside6/libpyside/pysidesignal.cpp | 5 +++++ sources/pyside6/tests/QtCore/destroysignal_test.py | 7 ++++++- 2 files changed, 11 insertions(+), 1 deletion(-) (limited to 'sources/pyside6') 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() -- cgit v1.2.3