diff options
author | Thomas Haller <thaller@redhat.com> | 2020-09-15 19:34:04 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2020-09-18 15:26:40 +0200 |
commit | 5e841433786ad6b2de7fe4cf8f6432ca6f925d71 (patch) | |
tree | c87e440b2ef19d2767184b2005827b6b33fae938 | |
parent | 51b7d351faa5219daeff3a8f0adf24e2a9e31e02 (diff) | |
download | NetworkManager-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.c | 22 |
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; } /*****************************************************************************/ |