summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGustavo J. A. M. Carneiro <gcarneiro@src.gnome.org>2004-09-25 15:05:16 +0000
committerGustavo J. A. M. Carneiro <gcarneiro@src.gnome.org>2004-09-25 15:05:16 +0000
commitc67547acbb1d2e2355b0eae659e879df981c9eb3 (patch)
tree972ecf42215713b8421416473d2604feeeb523dd
parent4079310fbf18fa812f4069e0fb71bcb4e43cf7ed (diff)
downloadpygobject-c67547acbb1d2e2355b0eae659e879df981c9eb3.tar.gz
Bug 153718: exception in overriden gsignals causes ref count problems
-rw-r--r--gobject/gobjectmodule.c4
-rw-r--r--tests/gtype.py8
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__':