[gnome-calendar/mcatanzaro/#434: 19/19] Don't leave dangling pointers in the GcalEvent cache
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-calendar/mcatanzaro/#434: 19/19] Don't leave dangling pointers in the GcalEvent cache
- Date: Sun, 25 Aug 2019 14:45:53 +0000 (UTC)
commit 748b7207e7f8d03cc1c3f8a63ec4a0573dabc71e
Author: Michael Catanzaro <mcatanzaro igalia com>
Date: Tue Jul 16 19:40:06 2019 -0500
Don't leave dangling pointers in the GcalEvent cache
The cache has an unowned pointer to the GcalEvent's UID. We need to
update the cache with the GcalEvent's new UID to avoid use-after-free.
Fixes #434
src/core/gcal-event.c | 17 +++++++++++++++--
1 file changed, 15 insertions(+), 2 deletions(-)
---
diff --git a/src/core/gcal-event.c b/src/core/gcal-event.c
index ef16bf04..5bb91256 100644
--- a/src/core/gcal-event.c
+++ b/src/core/gcal-event.c
@@ -256,13 +256,20 @@ gcal_event_update_uid_internal (GcalEvent *self)
{
ECalComponentId *id;
const gchar *source_id;
+ gboolean should_update_cache;
/* Setup event uid */
source_id = self->calendar ? gcal_calendar_get_id (self->calendar) : "";
id = e_cal_component_get_id (self->component);
- /* Clear the previous uid */
- g_clear_pointer (&self->uid, g_free);
+ should_update_cache = self->uid != NULL;
+
+ if (should_update_cache)
+ {
+ g_debug ("Removing '%s' (%p) from cache", self->uid, self);
+ g_hash_table_remove (event_cache, self->uid);
+ g_clear_pointer (&self->uid, g_free);
+ }
if (e_cal_component_id_get_rid (id) != NULL)
{
@@ -278,6 +285,12 @@ gcal_event_update_uid_internal (GcalEvent *self)
e_cal_component_id_get_uid (id));
}
+ if (should_update_cache)
+ {
+ g_debug ("Adding %s to the cache", self->uid);
+ g_hash_table_insert (event_cache, self->uid, self);
+ }
+
e_cal_component_id_free (id);
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_UID]);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]