[evolution-data-server] source_write_sync: Fail gracefully when given a scratch source.



commit 8797493a7d211ec960e03cb8fcd9653220b6fa43
Author: Matthew Barnes <mbarnes redhat com>
Date:   Tue Feb 19 09:18:47 2013 -0500

    source_write_sync: Fail gracefully when given a scratch source.
    
    Apparently e_dbus_object_get_source_writable() does not check its
    argument for NULL, and scratch sources have no internal EDBusObject.

 libedataserver/e-source.c |   20 ++++++++++++--------
 1 files changed, 12 insertions(+), 8 deletions(-)
---
diff --git a/libedataserver/e-source.c b/libedataserver/e-source.c
index cfb1977..9f340f6 100644
--- a/libedataserver/e-source.c
+++ b/libedataserver/e-source.c
@@ -1005,16 +1005,20 @@ source_write_sync (ESource *source,
                    GCancellable *cancellable,
                    GError **error)
 {
-       EDBusObject *dbus_object;
-       EDBusSourceWritable *dbus_source;
+       EDBusSourceWritable *dbus_interface = NULL;
+       GDBusObject *dbus_object;
        gboolean success;
        gchar *data;
 
-       dbus_object = E_DBUS_OBJECT (source->priv->dbus_object);
-
-       dbus_source = e_dbus_object_get_source_writable (dbus_object);
+       dbus_object = e_source_ref_dbus_object (source);
+       if (dbus_object != NULL) {
+               dbus_interface =
+                       e_dbus_object_get_source_writable (
+                       E_DBUS_OBJECT (dbus_object));
+               g_object_unref (dbus_object);
+       }
 
-       if (dbus_source == NULL) {
+       if (dbus_interface == NULL) {
                g_set_error (
                        error, G_IO_ERROR,
                        G_IO_ERROR_PERMISSION_DENIED,
@@ -1026,11 +1030,11 @@ source_write_sync (ESource *source,
        data = e_source_to_string (source, NULL);
 
        success = e_dbus_source_writable_call_write_sync (
-               dbus_source, data, cancellable, error);
+               dbus_interface, data, cancellable, error);
 
        g_free (data);
 
-       g_object_unref (dbus_source);
+       g_object_unref (dbus_interface);
 
        return success;
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]