summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2023-01-06 05:04:11 +0100
committerMilan Crha <mcrha@redhat.com>2023-01-06 05:07:35 +0100
commitc263341ffeb778f49f119b73d8fa9ed1b11d8139 (patch)
treecdda036f81301f400ebdb51c47d19ea13908c2ba
parent5ff49992a0640c83e65b5198f0b09afaf5deca91 (diff)
downloadevolution-data-server-c263341ffeb778f49f119b73d8fa9ed1b11d8139.tar.gz
Fix a crash under source_registry_object_added_no_owner()
The EDBusObject does not always contain the EDBusSource interface, it could sometimes happen when the source registry process had been restarted. This had been reported downstream at: https://bugzilla.redhat.com/show_bug.cgi?id=2094417
-rw-r--r--src/libedataserver/e-source-registry.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/libedataserver/e-source-registry.c b/src/libedataserver/e-source-registry.c
index 6701a3acf..4a9b398ca 100644
--- a/src/libedataserver/e-source-registry.c
+++ b/src/libedataserver/e-source-registry.c
@@ -304,10 +304,15 @@ source_registry_dbus_object_dup_uid (GDBusObject *dbus_object)
EDBusObject *e_dbus_object;
EDBusSource *e_dbus_source;
- /* EDBusSource interface should always be present. */
+ if (!E_DBUS_IS_OBJECT (dbus_object))
+ return NULL;
+
e_dbus_object = E_DBUS_OBJECT (dbus_object);
e_dbus_source = e_dbus_object_peek_source (e_dbus_object);
+ if (!E_DBUS_IS_SOURCE (e_dbus_source))
+ return NULL;
+
return e_dbus_source_dup_uid (e_dbus_source);
}
@@ -840,6 +845,9 @@ source_registry_object_added_no_owner (ESourceRegistry *registry,
uid = source_registry_dbus_object_dup_uid (dbus_object);
+ if (!uid)
+ return;
+
if (source_registry_service_restart_table_remove (registry, uid))
source = e_source_registry_ref_source (registry, uid);
@@ -956,7 +964,8 @@ source_registry_object_removed_no_owner (ESourceRegistry *registry,
gchar *uid;
uid = source_registry_dbus_object_dup_uid (dbus_object);
- source_registry_service_restart_table_add (registry, uid);
+ if (uid)
+ source_registry_service_restart_table_add (registry, uid);
g_free (uid);
}
}