diff options
| -rw-r--r-- | ChangeLog | 9 | ||||
| -rw-r--r-- | gobject/gobjectmodule.c | 8 | ||||
| -rw-r--r-- | tests/test_signal.py | 10 |
3 files changed, 27 insertions, 0 deletions
@@ -1,5 +1,14 @@ 2008-08-11 Paul Pogonyshev <pogonyshev@gmx.net> + Bug 540376 – No TypeError raised when type is None + + * gobject/gobjectmodule.c (pyg_signal_new): Add check on second + argument type. + + * tests/test_signal.py (TestSignalCreation): New test case. + +2008-08-11 Paul Pogonyshev <pogonyshev@gmx.net> + Bug 547104 – improve type wrapper creation * gio/gappinfo.override (_wrap_g_app_info_tp_richcompare) diff --git a/gobject/gobjectmodule.c b/gobject/gobjectmodule.c index b7fadfd..29ccdf2 100644 --- a/gobject/gobjectmodule.c +++ b/gobject/gobjectmodule.c @@ -1314,12 +1314,20 @@ pyg_signal_new(PyObject *self, PyObject *args) &py_type, &signal_flags, &py_return_type, &py_param_types)) return NULL; + instance_type = pyg_type_from_object(py_type); if (!instance_type) return NULL; + if (!(G_TYPE_IS_INSTANTIATABLE(instance_type) || G_TYPE_IS_INTERFACE(instance_type))) { + PyErr_SetString(PyExc_TypeError, + "argument 2 must be an object type or interface type"); + return NULL; + } + return_type = pyg_type_from_object(py_return_type); if (!return_type) return NULL; + if (!PySequence_Check(py_param_types)) { PyErr_SetString(PyExc_TypeError, "argument 5 must be a sequence of GType codes"); diff --git a/tests/test_signal.py b/tests/test_signal.py index 6c41ece..96e0731 100644 --- a/tests/test_signal.py +++ b/tests/test_signal.py @@ -17,6 +17,16 @@ class D(C): self.arg2 = arg2 C.do_my_signal(self, arg2) +class TestSignalCreation(unittest.TestCase): + # Bug 540376. + def test_illegals(self): + self.assertRaises(TypeError, lambda: gobject.signal_new('test', + None, + 0, + gobject.TYPE_NONE, + (gobject.TYPE_LONG,))) + + class TestChaining(unittest.TestCase): def setUp(self): self.inst = C() |
