Do not crash when checking whether an instance type is of a given fundamental.
authorAndre Moreira Magalhaes (andrunko) <andre.magalhaes@collabora.co.uk>
Wed, 30 Jul 2014 00:04:48 +0000 (21:04 -0300)
committerEdward Hervey <edward@collabora.com>
Fri, 8 Aug 2014 09:13:01 +0000 (11:13 +0200)
Not all instances have a TypeNode associated (e.g. GstEvent), so lets check if node is available
before trying to use it.

This crash can be easily reproduced by creating an event with gst_event_new_eos and using
G_IS_OBJECT on the event instance.

https://bugzilla.gnome.org/show_bug.cgi?id=733982

gobject/gtype.c

index 9e60a1e..f766ffd 100644 (file)
@@ -3972,9 +3972,11 @@ gboolean
 g_type_check_instance_is_fundamentally_a (GTypeInstance *type_instance,
                                           GType          fundamental_type)
 {
+  TypeNode *node;
   if (!type_instance || !type_instance->g_class)
     return FALSE;
-  return NODE_FUNDAMENTAL_TYPE(lookup_type_node_I (type_instance->g_class->g_type)) == fundamental_type;
+  node = lookup_type_node_I (type_instance->g_class->g_type);
+  return node && (NODE_FUNDAMENTAL_TYPE(node) == fundamental_type);
 }
 
 gboolean