diff -u pygobject-2.16.1/debian/changelog pygobject-2.16.1/debian/changelog --- pygobject-2.16.1/debian/changelog +++ pygobject-2.16.1/debian/changelog @@ -1,3 +1,9 @@ +pygobject (2.16.1-1ubuntu3) karmic; urgency=low + + * fix crash on subclassing gobject classes; closes: #378592 + + -- Daniel Poelzleithner Tue, 09 Jun 2009 21:36:20 +0200 + pygobject (2.16.1-1ubuntu2) jaunty; urgency=low * debian/patches/91_upstream_change_fix_rhythmbox_crash.patch: diff -u pygobject-2.16.1/debian/patches/series pygobject-2.16.1/debian/patches/series --- pygobject-2.16.1/debian/patches/series +++ pygobject-2.16.1/debian/patches/series @@ -9,0 +10 @@ +95_fix_subclassing.patch only in patch2: unchanged: --- pygobject-2.16.1.orig/debian/patches/95_fix_subclassing.patch +++ pygobject-2.16.1/debian/patches/95_fix_subclassing.patch @@ -0,0 +1,50 @@ +From 8dd1d31c6e009200af22c3c0c24fa4ae47233246 Mon Sep 17 00:00:00 2001 +From: Paul Pogonyshev +Date: Wed, 22 Apr 2009 21:08:49 +0300 +Subject: [PATCH] Fix a crash in pyg_type_add_interfaces() + +Reported as part of bug #566571. +--- + gobject/gobjectmodule.c | 12 ++++++++---- + 1 files changed, 8 insertions(+), 4 deletions(-) + +diff --git a/gobject/gobjectmodule.c b/gobject/gobjectmodule.c +index aecf937..73bfc3c 100644 +--- a/gobject/gobjectmodule.c ++++ b/gobject/gobjectmodule.c +@@ -1079,16 +1079,20 @@ pyg_type_add_interfaces(PyTypeObject *class, GType instance_type, + + for (i = 0; i < PyTuple_GET_SIZE(bases); ++i) { + guint k; +- PyTypeObject *base = (PyTypeObject *) PyTuple_GET_ITEM(bases, i); ++ PyObject *base = PyTuple_GET_ITEM(bases, i); + GType itype; + gboolean is_new = TRUE; + const GInterfaceInfo *iinfo; + GInterfaceInfo iinfo_copy; + +- if (!PyType_IsSubtype(base, &PyGInterface_Type)) ++ /* 'base' can also be a PyClassObject, see bug #566571. */ ++ if (!PyType_Check(base)) + continue; + +- itype = pyg_type_from_object((PyObject *) base); ++ if (!PyType_IsSubtype((PyTypeObject*) base, &PyGInterface_Type)) ++ continue; ++ ++ itype = pyg_type_from_object(base); + + /* Happens for _implementations_ of an interface. */ + if (!G_TYPE_IS_INTERFACE(itype)) +@@ -1109,7 +1113,7 @@ pyg_type_add_interfaces(PyTypeObject *class, GType instance_type, + gchar *error; + error = g_strdup_printf("Interface type %s " + "has no Python implementation support", +- base->tp_name); ++ ((PyTypeObject *) base)->tp_name); + PyErr_Warn(PyExc_RuntimeWarning, error); + g_free(error); + continue; +-- +1.6.2.4 +