diff options
author | David Zeuthen <davidz@redhat.com> | 2010-05-21 12:09:27 -0400 |
---|---|---|
committer | David Zeuthen <davidz@redhat.com> | 2010-05-21 12:11:04 -0400 |
commit | bf24dff88eb3c794ae846cb7b8397510407ad9f5 (patch) | |
tree | cc2cd40d7e0a99ca365b26bf2962b5f9eb1860c5 /gio | |
parent | c7f0f2c4377c5fd242c52d30a09df74e6d6e9828 (diff) |
Return an error for calls into unknown interfaces or unknown objects
Ryan pointed out on IRC that we didn't do anything here. Looking at
the code, it's painfully obvious that we should be returning an error
here since a comment already says that we've exhausted all possible
options.
Signed-off-by: David Zeuthen <davidz@redhat.com>
Diffstat (limited to 'gio')
-rw-r--r-- | gio/gdbusconnection.c | 10 | ||||
-rw-r--r-- | gio/tests/gdbus-export.c | 12 |
2 files changed, 21 insertions, 1 deletions
diff --git a/gio/gdbusconnection.c b/gio/gdbusconnection.c index 7bc72245e..346afcfb0 100644 --- a/gio/gdbusconnection.c +++ b/gio/gdbusconnection.c @@ -5088,6 +5088,7 @@ static void distribute_method_call (GDBusConnection *connection, GDBusMessage *message) { + GDBusMessage *reply; ExportedObject *eo; ExportedSubtree *es; const gchar *object_path; @@ -5154,7 +5155,14 @@ distribute_method_call (GDBusConnection *connection, if (handle_generic_unlocked (connection, message)) goto out; - /* if we end up here, the message has not been not handled */ + /* if we end up here, the message has not been not handled - so return an error saying this */ + reply = g_dbus_message_new_method_error (message, + "org.freedesktop.DBus.Error.UnknownMethod", + _("No such interface `%s' on object at path %s"), + interface_name, + object_path); + g_dbus_connection_send_message_unlocked (connection, reply, NULL, NULL); + g_object_unref (reply); out: g_free (subtree_path); diff --git a/gio/tests/gdbus-export.c b/gio/tests/gdbus-export.c index 304152743..b067cee80 100644 --- a/gio/tests/gdbus-export.c +++ b/gio/tests/gdbus-export.c @@ -824,6 +824,18 @@ test_dispatch_thread_func (gpointer user_data) g_error_free (error); g_assert (value == NULL); + error = NULL; + value = g_dbus_proxy_call_sync (foo_proxy, + "org.example.FooXYZ.NonExistant", + NULL, + G_DBUS_CALL_FLAGS_NONE, + -1, + NULL, + &error); + g_assert_error (error, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD); + g_error_free (error); + g_assert (value == NULL); + /* user properties */ error = NULL; value = g_dbus_proxy_call_sync (foo_proxy, |