[glib] GDBusProxy: Validate properties received from service if possible
- From: David Zeuthen <davidz src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib] GDBusProxy: Validate properties received from service if possible
- Date: Mon, 28 Mar 2011 16:03:33 +0000 (UTC)
commit aa59fb9dd1a20004a5ba5f4d97c271eb5abe01e9
Author: Olivier Crête <olivier crete collabora co uk>
Date: Fri Feb 18 20:34:06 2011 -0500
GDBusProxy: Validate properties received from service if possible
If the proxy has an GInterfaceInfo set, validate properties against it
so the application doesn't have to do it.
Signed-off-by: David Zeuthen <davidz redhat com>
gio/gdbusproxy.c | 42 ++++++++++++++++++++++++++++++++++++------
1 files changed, 36 insertions(+), 6 deletions(-)
---
diff --git a/gio/gdbusproxy.c b/gio/gdbusproxy.c
index ac10aea..eecbaf6 100644
--- a/gio/gdbusproxy.c
+++ b/gio/gdbusproxy.c
@@ -768,6 +768,36 @@ on_signal_received (GDBusConnection *connection,
/* ---------------------------------------------------------------------------------------------------- */
static void
+insert_property_checked (GDBusProxy *proxy,
+ gchar *property_name,
+ GVariant *value)
+{
+ if (proxy->priv->expected_interface != NULL)
+ {
+ const GDBusPropertyInfo *info;
+
+ info = g_dbus_interface_info_lookup_property (proxy->priv->expected_interface, property_name);
+ /* Ignore unknown properties */
+ if (info == NULL)
+ goto invalid;
+
+ /* Ignore properties with the wrong type */
+ if (g_strcmp0 (info->signature, g_variant_get_type_string (value)) != 0)
+ goto invalid;
+ }
+
+ g_hash_table_insert (proxy->priv->properties,
+ property_name, /* adopts string */
+ value); /* adopts value */
+
+ return;
+
+ invalid:
+ g_variant_unref (value);
+ g_free (property_name);
+}
+
+static void
on_properties_changed (GDBusConnection *connection,
const gchar *sender_name,
const gchar *object_path,
@@ -815,9 +845,9 @@ on_properties_changed (GDBusConnection *connection,
g_variant_iter_init (&iter, changed_properties);
while (g_variant_iter_next (&iter, "{sv}", &key, &value))
{
- g_hash_table_insert (proxy->priv->properties,
- key, /* adopts string */
- value); /* adopts value */
+ insert_property_checked (proxy,
+ key, /* adopts string */
+ value); /* adopts value */
}
for (n = 0; invalidated_properties[n] != NULL; n++)
@@ -857,9 +887,9 @@ process_get_all_reply (GDBusProxy *proxy,
g_variant_get (result, "(a{sv})", &iter);
while (g_variant_iter_next (iter, "{sv}", &key, &value))
{
- g_hash_table_insert (proxy->priv->properties,
- key, /* adopts string */
- value); /* adopts value */
+ insert_property_checked (proxy,
+ key, /* adopts string */
+ value); /* adopts value */
}
g_variant_iter_free (iter);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]