summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2020-09-15 19:34:04 +0200
committerThomas Haller <thaller@redhat.com>2020-09-18 15:26:40 +0200
commit5e841433786ad6b2de7fe4cf8f6432ca6f925d71 (patch)
treec87e440b2ef19d2767184b2005827b6b33fae938
parent51b7d351faa5219daeff3a8f0adf24e2a9e31e02 (diff)
downloadNetworkManager-5e841433786ad6b2de7fe4cf8f6432ca6f925d71.tar.gz
core: assert that nm_dbus_utils_get_property() returns a variant of the expected type
g_dbus_gvalue_to_gvariant() doesn't check/assert that the value has the right variant signature, if the value is already a GVariant. Add an assertion.
-rw-r--r--src/nm-dbus-utils.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/src/nm-dbus-utils.c b/src/nm-dbus-utils.c
index 07fa909d20..49878cf78e 100644
--- a/src/nm-dbus-utils.c
+++ b/src/nm-dbus-utils.c
@@ -72,21 +72,35 @@ nm_dbus_utils_get_property (GObject *obj,
const char *signature,
const char *property_name)
{
- GParamSpec *pspec;
nm_auto_unset_gvalue GValue value = G_VALUE_INIT;
+ GParamSpec *pspec;
+ GVariant *variant;
nm_assert (G_IS_OBJECT (obj));
nm_assert (g_variant_type_string_is_valid (signature));
nm_assert (property_name && property_name[0]);
pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (obj), property_name);
- if (!pspec)
- g_return_val_if_reached (NULL);
+
+ nm_assert (pspec);
+
+ nm_assert ( pspec->value_type != G_TYPE_VARIANT
+ || nm_streq ((char *) (((GParamSpecVariant *) pspec)->type), signature));
g_value_init (&value, pspec->value_type);
+
g_object_get_property (obj, property_name, &value);
+
+ variant = g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (signature));
+
+ nm_assert ( !variant
+ || g_variant_is_of_type (variant, G_VARIANT_TYPE (signature)));
+
/* returns never-floating variant */
- return g_dbus_gvalue_to_gvariant (&value, G_VARIANT_TYPE (signature));
+ nm_assert ( !variant
+ || !g_variant_is_floating (variant));
+
+ return variant;
}
/*****************************************************************************/