GObject: do checks on interface property install
authorRyan Lortie <desrt@desrt.ca>
Wed, 21 Dec 2011 00:45:57 +0000 (19:45 -0500)
committerRyan Lortie <desrt@desrt.ca>
Wed, 21 Dec 2011 00:45:57 +0000 (19:45 -0500)
Add some checks to g_object_interface_install_property() similar to
those in g_object_class_install_property().

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

gobject/gobject.c
gobject/tests/param.c

index 446ea4a..874096e 100644 (file)
@@ -706,7 +706,13 @@ g_object_interface_install_property (gpointer      g_iface,
   g_return_if_fail (G_IS_PARAM_SPEC (pspec));
   g_return_if_fail (!G_IS_PARAM_SPEC_OVERRIDE (pspec)); /* paranoid */
   g_return_if_fail (PARAM_SPEC_PARAM_ID (pspec) == 0); /* paranoid */
-                   
+
+  g_return_if_fail (pspec->flags & (G_PARAM_READABLE | G_PARAM_WRITABLE));
+  if (pspec->flags & G_PARAM_CONSTRUCT)
+    g_return_if_fail ((pspec->flags & G_PARAM_CONSTRUCT_ONLY) == 0);
+  if (pspec->flags & (G_PARAM_CONSTRUCT | G_PARAM_CONSTRUCT_ONLY))
+    g_return_if_fail (pspec->flags & G_PARAM_WRITABLE);
+
   install_property_internal (iface_class->g_type, 0, pspec);
 }
 
index 2250d61..7e7721b 100644 (file)
@@ -487,7 +487,7 @@ test_interface_default_init (TestInterfaceInterface *iface)
                 g_object_interface_install_property (iface, pspec);
                 exit (0);
               }
-            //g_test_trap_assert_failed (); XXX g_object_interface_install_property has no checks
+            g_test_trap_assert_failed ();
             continue;
           }