From 76f5460107c86a44be6387c159b34ae50aa1e623 Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Thu, 17 Mar 2022 18:32:46 +0000 Subject: [PATCH] gdbusmethodinvocation: Fix dead code for type checking GetAll `property_info` is only ever set for `Get` and `Set` calls, not for `GetAll`, as it only represents a single property. So this code was never reachable. Move it out so that it is reachable. Signed-off-by: Philip Withnall Conflict:NA Reference:https://gitlab.gnome.org/GNOME/glib/-/commit/76f5460107c86a44be6387c159b34ae50aa1e623 --- gio/gdbusmethodinvocation.c | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/gio/gdbusmethodinvocation.c b/gio/gdbusmethodinvocation.c index c15d83ec84..8e7abc83c4 100644 --- a/gio/gdbusmethodinvocation.c +++ b/gio/gdbusmethodinvocation.c @@ -424,7 +424,9 @@ g_dbus_method_invocation_return_value_internal (GDBusMethodInvocation *invocatio /* property_info is only non-NULL if set that way from * GDBusConnection, so this must be the case of async property - * handling on either 'Get', 'Set' or 'GetAll'. + * handling on either 'Get' or 'Set'. + * + * property_info is NULL for 'GetAll'. */ if (invocation->property_info != NULL) { @@ -454,21 +456,6 @@ g_dbus_method_invocation_return_value_internal (GDBusMethodInvocation *invocatio g_variant_unref (nested); } - else if (g_str_equal (invocation->method_name, "GetAll")) - { - if (!g_variant_is_of_type (parameters, G_VARIANT_TYPE ("(a{sv})"))) - { - g_warning ("Type of return value for property 'GetAll' call should be '(a{sv})' but got '%s'", - g_variant_get_type_string (parameters)); - goto out; - } - - /* Could iterate the list of properties and make sure that all - * of them are actually on the interface and with the correct - * types, but let's not do that for now... - */ - } - else if (g_str_equal (invocation->method_name, "Set")) { if (!g_variant_is_of_type (parameters, G_VARIANT_TYPE_UNIT)) @@ -482,6 +469,21 @@ g_dbus_method_invocation_return_value_internal (GDBusMethodInvocation *invocatio else g_assert_not_reached (); } + else if (g_str_equal (invocation->interface_name, "org.freedesktop.DBus.Properties") && + g_str_equal (invocation->method_name, "GetAll")) + { + if (!g_variant_is_of_type (parameters, G_VARIANT_TYPE ("(a{sv})"))) + { + g_warning ("Type of return value for property 'GetAll' call should be '(a{sv})' but got '%s'", + g_variant_get_type_string (parameters)); + goto out; + } + + /* Could iterate the list of properties and make sure that all + * of them are actually on the interface and with the correct + * types, but let's not do that for now... + */ + } if (G_UNLIKELY (_g_dbus_debug_return ())) { -- GitLab