diff --git a/gobject/gtype.c b/gobject/gtype.c index 77feb7d4a..8665db294 100644 --- a/gobject/gtype.c +++ b/gobject/gtype.c @@ -4161,7 +4161,7 @@ g_type_check_instance_is_a (GTypeInstance *type_instance, return FALSE; iface = lookup_type_node_I (iface_type); - if (iface->is_final) + if (iface && iface->is_final) return type_instance->g_class->g_type == iface_type; node = lookup_type_node_I (type_instance->g_class->g_type); diff --git a/gobject/tests/type-flags.c b/gobject/tests/type-flags.c index 23313c68e..653cb9b01 100644 --- a/gobject/tests/type-flags.c +++ b/gobject/tests/type-flags.c @@ -130,6 +130,8 @@ test_type_flags_final_instance_check (void) TEST_TYPE_DEPRECATED)); g_assert_true (g_type_check_instance_is_a ((GTypeInstance *) final, G_TYPE_OBJECT)); + g_assert_false (g_type_check_instance_is_a ((GTypeInstance *) final, + G_TYPE_INVALID)); g_clear_object (&final); } @@ -184,6 +186,8 @@ test_type_flags_deprecated (void) G_TYPE_OBJECT)); g_assert_false (g_type_check_instance_is_a ((GTypeInstance *) deprecated_object, TEST_TYPE_FINAL)); + g_assert_false (g_type_check_instance_is_a ((GTypeInstance *) deprecated_object, + G_TYPE_INVALID)); g_test_assert_expected_messages ();