From 8797493a7d211ec960e03cb8fcd9653220b6fa43 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Tue, 19 Feb 2013 09:18:47 -0500 Subject: [PATCH] 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 file 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; } -- 2.7.4