diff options
author | Milan Crha <mcrha@redhat.com> | 2023-01-06 05:04:11 +0100 |
---|---|---|
committer | Milan Crha <mcrha@redhat.com> | 2023-01-06 05:07:35 +0100 |
commit | c263341ffeb778f49f119b73d8fa9ed1b11d8139 (patch) | |
tree | cdda036f81301f400ebdb51c47d19ea13908c2ba | |
parent | 5ff49992a0640c83e65b5198f0b09afaf5deca91 (diff) | |
download | evolution-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.c | 13 |
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); } } |