diff options
author | Gustavo J. A. M. Carneiro <gcarneiro@src.gnome.org> | 2004-09-25 15:05:16 +0000 |
---|---|---|
committer | Gustavo J. A. M. Carneiro <gcarneiro@src.gnome.org> | 2004-09-25 15:05:16 +0000 |
commit | c67547acbb1d2e2355b0eae659e879df981c9eb3 (patch) | |
tree | 972ecf42215713b8421416473d2604feeeb523dd | |
parent | 4079310fbf18fa812f4069e0fb71bcb4e43cf7ed (diff) | |
download | pygobject-c67547acbb1d2e2355b0eae659e879df981c9eb3.tar.gz |
Bug 153718: exception in overriden gsignals causes ref count problems
-rw-r--r-- | gobject/gobjectmodule.c | 4 | ||||
-rw-r--r-- | tests/gtype.py | 8 |
2 files changed, 7 insertions, 5 deletions
diff --git a/gobject/gobjectmodule.c b/gobject/gobjectmodule.c index 546c62b5..2dfd9903 100644 --- a/gobject/gobjectmodule.c +++ b/gobject/gobjectmodule.c @@ -950,11 +950,9 @@ pyg_type_register(PyObject *self, PyObject *args) if (!PyDict_Check(gsignals)) { PyErr_SetString(PyExc_TypeError, "__gsignals__ attribute not a dict!"); - Py_DECREF(gsignals); return NULL; } if (!add_signals(instance_type, gsignals)) { - Py_DECREF(gsignals); return NULL; } PyDict_DelItemString(class->tp_dict, "__gsignals__"); @@ -970,11 +968,9 @@ pyg_type_register(PyObject *self, PyObject *args) if (!PyDict_Check(gproperties)) { PyErr_SetString(PyExc_TypeError, "__gproperties__ attribute not a dict!"); - Py_DECREF(gproperties); return NULL; } if (!add_properties(instance_type, gproperties)) { - Py_DECREF(gproperties); return NULL; } PyDict_DelItemString(class->tp_dict, "__gproperties__"); diff --git a/tests/gtype.py b/tests/gtype.py index 4cf7dd9d..70010946 100644 --- a/tests/gtype.py +++ b/tests/gtype.py @@ -49,7 +49,13 @@ class GTypeTest(unittest.TestCase): def testObject(self): self.checkType(gobject.TYPE_OBJECT, 'PyObject') - + + def testGObjectInvalidSignalOverride(self): + class Foo(gobject.GObject): + __gsignals__ = {} + __gsignals__['monkey'] = 'override' + self.assertRaises(TypeError, gobject.type_register, Foo) + # XXX: Flags, Enums if __name__ == '__main__': |