summaryrefslogtreecommitdiff
path: root/gio
diff options
context:
space:
mode:
authorDavid Zeuthen <davidz@redhat.com>2010-05-21 12:09:27 -0400
committerDavid Zeuthen <davidz@redhat.com>2010-05-21 12:11:04 -0400
commitbf24dff88eb3c794ae846cb7b8397510407ad9f5 (patch)
treecc2cd40d7e0a99ca365b26bf2962b5f9eb1860c5 /gio
parentc7f0f2c4377c5fd242c52d30a09df74e6d6e9828 (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.c10
-rw-r--r--gio/tests/gdbus-export.c12
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,