valgrind claims invalid read
While testing https://bugzilla.redhat.com/show_bug.cgi?id=1668914 under valgrind I found that there's a use-after-free when I disable a calendar which has events in the current view and then enable it again. Valgrind claims this:
==31800== Invalid read of size 1
==31800== at 0x10083CB34: strcmp (vg_replace_strmem.c:849)
==31800== by 0x10175B5BC: g_str_equal (ghash.c:2292)
==31800== by 0x101758F3E: g_hash_table_lookup_node (ghash.c:492)
==31800== by 0x10175AA33: g_hash_table_contains (ghash.c:1704)
==31800== by 0x4491C2: gcal_event_new (gcal-event.c:787)
==31800== by 0x42582E: gcal_month_view_component_added (gcal-month-view.c:1247)
==31800== by 0x468157: e_cal_data_model_subscriber_component_added (e-cal-data-model-subscriber.c:53)
==31800== by 0x462567: cal_data_model_add_component_cb (e-cal-data-model.c:689)
==31800== by 0x462365: cal_data_model_foreach_subscriber_in_range (e-cal-data-model.c:619)
==31800== by 0x462E61: cal_data_model_process_added_component (e-cal-data-model.c:917)
==31800== by 0x46355B: cal_data_model_notify_recurrences_cb (e-cal-data-model.c:1092)
==31800== by 0x10177002F: g_timeout_dispatch (gmain.c:4691)
==31800== by 0x10176E139: g_main_dispatch (gmain.c:3202)
==31800== by 0x10176F02F: g_main_context_dispatch (gmain.c:3867)
==31800== by 0x10176F214: g_main_context_iterate (gmain.c:3940)
==31800== by 0x10176F2D8: g_main_context_iteration (gmain.c:4001)
==31800== by 0x1015A6E02: g_application_run (gapplication.c:2516)
==31800== by 0x460A1C: main (main.c:40)
==31800== Address 0x117bd8720 is 0 bytes inside a block of size 87 free'd
==31800== at 0x100839A0C: free (vg_replace_malloc.c:540)
==31800== by 0x101776E6F: g_free (gmem.c:192)
==31800== by 0x4480E3: gcal_event_update_uid_internal (gcal-event.c:268)
==31800== by 0x448611: gcal_event_set_component_internal (gcal-event.c:398)
==31800== by 0x449213: gcal_event_new (gcal-event.c:792)
==31800== by 0x431BD6: gcal_week_view_component_added (gcal-week-view.c:311)
==31800== by 0x468157: e_cal_data_model_subscriber_component_added (e-cal-data-model-subscriber.c:53)
==31800== by 0x462567: cal_data_model_add_component_cb (e-cal-data-model.c:689)
==31800== by 0x462365: cal_data_model_foreach_subscriber_in_range (e-cal-data-model.c:619)
==31800== by 0x462E61: cal_data_model_process_added_component (e-cal-data-model.c:917)
==31800== by 0x46355B: cal_data_model_notify_recurrences_cb (e-cal-data-model.c:1092)
==31800== by 0x10177002F: g_timeout_dispatch (gmain.c:4691)
==31800== by 0x10176E139: g_main_dispatch (gmain.c:3202)
==31800== by 0x10176F02F: g_main_context_dispatch (gmain.c:3867)
==31800== by 0x10176F214: g_main_context_iterate (gmain.c:3940)
==31800== by 0x10176F2D8: g_main_context_iteration (gmain.c:4001)
==31800== by 0x1015A6E02: g_application_run (gapplication.c:2516)
==31800== by 0x460A1C: main (main.c:40)
==31800== Block was alloc'd at
==31800== at 0x10083AD19: realloc (vg_replace_malloc.c:836)
==31800== by 0x101BA2DC0: __vasprintf_internal (in /usr/lib64/libc-2.29.so)
==31800== by 0x1017C740F: g_vasprintf (gprintf.c:330)
==31800== by 0x101794B5D: g_strdup_vprintf (gstrfuncs.c:514)
==31800== by 0x101794C02: g_strdup_printf (gstrfuncs.c:540)
==31800== by 0x448115: gcal_event_update_uid_internal (gcal-event.c:272)
==31800== by 0x449EFA: gcal_event_set_source (gcal-event.c:1338)
==31800== by 0x448DFF: gcal_event_set_property (gcal-event.c:578)
==31800== by 0x1016D208C: object_set_property (gobject.c:1471)
==31800== by 0x1016D2CF6: g_object_new_internal (gobject.c:1863)
==31800== by 0x1016D3AAB: g_object_new_valist (gobject.c:2155)
==31800== by 0x10152D574: g_initable_new_valist (ginitable.c:244)
==31800== by 0x10152D43B: g_initable_new (ginitable.c:162)
==31800== by 0x449259: gcal_event_new (gcal-event.c:797)
==31800== by 0x431BD6: gcal_week_view_component_added (gcal-week-view.c:311)
==31800== by 0x468157: e_cal_data_model_subscriber_component_added (e-cal-data-model-subscriber.c:53)
==31800== by 0x462567: cal_data_model_add_component_cb (e-cal-data-model.c:689)
==31800== by 0x462365: cal_data_model_foreach_subscriber_in_range (e-cal-data-model.c:619)
==31800== by 0x462E61: cal_data_model_process_added_component (e-cal-data-model.c:917)
==31800== by 0x46355B: cal_data_model_notify_recurrences_cb (e-cal-data-model.c:1092)
==31800== by 0x10177002F: g_timeout_dispatch (gmain.c:4691)
==31800== by 0x10176E139: g_main_dispatch (gmain.c:3202)
==31800== by 0x10176F02F: g_main_context_dispatch (gmain.c:3867)
==31800== by 0x10176F214: g_main_context_iterate (gmain.c:3940)
==31800== by 0x10176F63B: g_main_loop_run (gmain.c:4136)
==31800== by 0x100A6FE96: gtk_dialog_run (gtkdialog.c:1398)
==31800== by 0x10085F361: e_credentials_prompter_impl_password_show_dialog (e-credentials-prompter-impl-password.c:392)
==31800== by 0x10085F6FA: e_credentials_prompter_impl_password_show_dialog_idle_cb (e-credentials-prompter-impl-password.c:450)
==31800== by 0x101770D31: g_idle_dispatch (gmain.c:5640)
==31800== by 0x10176E139: g_main_dispatch (gmain.c:3202)
plus some more, probably depending on the amount of the events being provide by the chosen calendar.