[glib] GObject: do checks on interface property install



commit 557da1650707bbb67b80be0c986598eab3893071
Author: Ryan Lortie <desrt desrt ca>
Date:   Tue Dec 20 19:45:57 2011 -0500

    GObject: do checks on interface property install
    
    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     |    8 +++++++-
 gobject/tests/param.c |    2 +-
 2 files changed, 8 insertions(+), 2 deletions(-)
---
diff --git a/gobject/gobject.c b/gobject/gobject.c
index 446ea4a..874096e 100644
--- a/gobject/gobject.c
+++ b/gobject/gobject.c
@@ -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);
 }
 
diff --git a/gobject/tests/param.c b/gobject/tests/param.c
index 2250d61..7e7721b 100644
--- a/gobject/tests/param.c
+++ b/gobject/tests/param.c
@@ -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;
           }
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]