[glib/wip/gapplication-22: 18/28] Return an error for calls into unknown interfaces or unknown objects



commit b66eedab66ebd14cf14c7a4655fb9836d58a70ed
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]