Fix bug when checking template object type
authorThibault Saunier <tsaunier@gnome.org>
Fri, 19 Feb 2016 16:13:57 +0000 (17:13 +0100)
committerThibault Saunier <tsaunier@gnome.org>
Sat, 20 Feb 2016 20:47:09 +0000 (21:47 +0100)
gi/overrides/gstmodule.c

index c40c521..e426165 100644 (file)
@@ -147,10 +147,27 @@ add_templates (gpointer gclass, PyObject * templates)
 
     for (i = 0; i < len; i++) {
       templ = (PyGObject *) PyTuple_GetItem (templates, i);
-      if (!pygobject_check (templates, &PyGObject_Type) ||
-          GST_IS_PAD_TEMPLATE (pygobject_get (templates)) == FALSE) {
-        PyErr_SetString (PyExc_TypeError,
-            "entries for __gsttemplates__ must be of type GstPadTemplate");
+
+      if (!pygobject_check (templ, &PyGObject_Type)) {
+        PyObject *repr = PyObject_Repr ((PyObject *) templ);
+#if PY_VERSION_HEX < 0x03000000
+        PyErr_Format (PyExc_TypeError, "expected GObject but got %s",
+            PyString_AsString (repr));
+#else
+        PyErr_Format (PyExc_TypeError, "expected GObject but got %s",
+            _PyUnicode_AsString (repr));
+#endif
+        Py_DECREF (repr);
+
+        return -1;
+      } else if (!GST_IS_PAD_TEMPLATE (pygobject_get (templ))) {
+        gchar *error =
+            g_strdup_printf
+            ("entries for __gsttemplates__ must be of type GstPadTemplate (%s)",
+            G_OBJECT_TYPE_NAME (pygobject_get (templ)));
+        PyErr_SetString (PyExc_TypeError, error);
+        g_free (error);
+
         return -1;
       }
     }