From ae4e0b8576a66bdf395535003edf42dd85a0caf1 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Thu, 25 Sep 2025 11:01:56 +0300 Subject: [PATCH] lib-storage: Subscription notifications - Fix crash if initial subscription refresh failed --- src/lib-storage/list/mailbox-list-index-notify.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/lib-storage/list/mailbox-list-index-notify.c b/src/lib-storage/list/mailbox-list-index-notify.c index cbfce12004..4e8fd57cc6 100644 --- a/src/lib-storage/list/mailbox-list-index-notify.c +++ b/src/lib-storage/list/mailbox-list-index-notify.c @@ -149,9 +149,11 @@ int mailbox_list_index_notify_init(struct mailbox_list *list, inotify->rec_name = str_new(default_pool, 64); if ((mask & (MAILBOX_LIST_NOTIFY_SUBSCRIBE | MAILBOX_LIST_NOTIFY_UNSUBSCRIBE)) != 0) { - (void)mailbox_list_iter_subscriptions_refresh(list); - mailbox_tree_sort(list->subscriptions); - inotify->subscriptions = mailbox_tree_dup(list->subscriptions); + if (mailbox_list_iter_subscriptions_refresh(list) == 0) { + mailbox_tree_sort(list->subscriptions); + inotify->subscriptions = + mailbox_tree_dup(list->subscriptions); + } } inotify->list_log_path = i_strdup(ilist->index->log->filepath); if (list->mail_set->mailbox_list_index_include_inbox) { @@ -514,6 +516,12 @@ mailbox_list_index_notify_find_subscribes(struct mailbox_list_notify_index *inot old_tree = inotify->subscriptions; new_tree = mailbox_tree_dup(inotify->notify.list->subscriptions); + if (old_tree == NULL) { + /* Initial subscription refresh failed. */ + inotify->subscriptions = new_tree; + return; + } + old_iter = mailbox_tree_iterate_init(old_tree, NULL, MAILBOX_SUBSCRIBED); new_iter = mailbox_tree_iterate_init(new_tree, NULL, MAILBOX_SUBSCRIBED); -- 2.47.3