From 0759aacd40cb8e2f2de47634a6043d8a1c35dcda Mon Sep 17 00:00:00 2001 From: George Hazan <ghazan@miranda.im> Date: Tue, 28 Nov 2017 13:02:52 +0300 Subject: crash fix for recursive contact deletion in Scriver --- plugins/Scriver/src/cmdlist.cpp | 4 +++- plugins/Scriver/src/cmdlist.h | 2 +- plugins/Scriver/src/msgdialog.cpp | 5 ++++- 3 files changed, 8 insertions(+), 3 deletions(-) (limited to 'plugins/Scriver') diff --git a/plugins/Scriver/src/cmdlist.cpp b/plugins/Scriver/src/cmdlist.cpp index dbeed95eec..4b8b66da7d 100644 --- a/plugins/Scriver/src/cmdlist.cpp +++ b/plugins/Scriver/src/cmdlist.cpp @@ -85,7 +85,7 @@ TCmdList* tcmdlist_last(TCmdList *list) return nullptr; } -void tcmdlist_free(TCmdList *list) +void tcmdlist_free(TCmdList *&list) { TCmdList *n = list, *next; @@ -95,4 +95,6 @@ void tcmdlist_free(TCmdList *list) mir_free(n); n = next; } + + list = nullptr; } diff --git a/plugins/Scriver/src/cmdlist.h b/plugins/Scriver/src/cmdlist.h index 249515ed10..9f2b89bb91 100644 --- a/plugins/Scriver/src/cmdlist.h +++ b/plugins/Scriver/src/cmdlist.h @@ -34,6 +34,6 @@ TCmdList* tcmdlist_remove_first(TCmdList *list); TCmdList* tcmdlist_last(TCmdList *list); int tcmdlist_len(TCmdList *list); -void tcmdlist_free(TCmdList *list); +void tcmdlist_free(TCmdList *&list); #endif diff --git a/plugins/Scriver/src/msgdialog.cpp b/plugins/Scriver/src/msgdialog.cpp index 6d1bd4afe1..162b22b7de 100644 --- a/plugins/Scriver/src/msgdialog.cpp +++ b/plugins/Scriver/src/msgdialog.cpp @@ -410,9 +410,12 @@ void CSrmmWindow::OnDestroy() DeleteObject(hFont); db_set_b(m_hContact, SRMM_MODULE, "UseRTL", m_bUseRtl); - if (m_hContact && (g_dat.flags & SMF_DELTEMP)) + if (m_hContact && (g_dat.flags & SMF_DELTEMP)) { + m_hContact = INVALID_CONTACT_ID; // to prevent recursion + if (db_get_b(m_hContact, "CList", "NotOnList", 0)) db_delete_contact(m_hContact); + } SendMessage(m_hwndParent, CM_REMOVECHILD, 0, (LPARAM)m_hwnd); if (m_hwndIeview != nullptr) { -- cgit v1.2.3