[glib] Return an error for calls into unknown interfaces or unknown objects
- From: David Zeuthen <davidz src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib] Return an error for calls into unknown interfaces or unknown objects
- Date: Fri, 21 May 2010 16:11:54 +0000 (UTC)
commit bf24dff88eb3c794ae846cb7b8397510407ad9f5
Author: David Zeuthen <davidz redhat com>
Date: Fri May 21 12:09:27 2010 -0400
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>
gio/gdbusconnection.c | 10 +++++++++-
gio/tests/gdbus-export.c | 12 ++++++++++++
2 files changed, 21 insertions(+), 1 deletions(-)
---
diff --git a/gio/gdbusconnection.c b/gio/gdbusconnection.c
index 7bc7224..346afcf 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 3041527..b067cee 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,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]