From e8d2b998009a1912988a74e56d37338fd7b94967 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sun, 21 May 2023 20:06:49 +0300 Subject: fix for eternal loop caused by embedded array item deletion --- src/mir_app/src/clistevents.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/mir_app/src/clistevents.cpp b/src/mir_app/src/clistevents.cpp index b7b88f6faf..b37dede347 100644 --- a/src/mir_app/src/clistevents.cpp +++ b/src/mir_app/src/clistevents.cpp @@ -293,12 +293,13 @@ MIR_APP_DLL(CListEvent *) Clist_GetEvent(MCONTACT hContact, int idx) int EventsProcessContactDoubleClick(MCONTACT hContact) { - for (auto &it : g_cliEvents) { - if (it->hContact == hContact) { - CallService(it->pszService, 0, (LPARAM)it); - g_clistApi.pfnFreeEvent(it); - return 0; - } + if (auto *pEvent = Clist_GetEvent(hContact, 0)) { + CallService(pEvent->pszService, 0, (LPARAM)pEvent); + + // if the event is still alive, free it + if (g_cliEvents.indexOf(pEvent)) + g_clistApi.pfnFreeEvent(pEvent); + return 0; } return 1; -- cgit v1.2.3