From 0566687ba03c35208a1fae5cfc8f046e14447184 Mon Sep 17 00:00:00 2001 From: Tobias Fella Date: Tue, 9 Sep 2025 09:34:21 +0200 Subject: [PATCH] Don't store RoomMembers in unique ptrs Causes crashes due to double-free --- src/libneochat/neochatroom.cpp | 4 ++-- src/libneochat/neochatroom.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/libneochat/neochatroom.cpp b/src/libneochat/neochatroom.cpp index 523e04979..afae28c0e 100644 --- a/src/libneochat/neochatroom.cpp +++ b/src/libneochat/neochatroom.cpp @@ -1744,12 +1744,12 @@ NeochatRoomMember *NeoChatRoom::qmlSafeMember(const QString &memberId) } if (!m_memberObjects.contains(memberId)) { - auto member = m_memberObjects.emplace(memberId, std::make_unique(this, memberId)).first->second.get(); + auto member = m_memberObjects.emplace(memberId, new NeochatRoomMember(this, memberId)).first->second; QQmlEngine::setObjectOwnership(member, QQmlEngine::CppOwnership); return member; } - return m_memberObjects[memberId].get(); + return m_memberObjects[memberId]; } void NeoChatRoom::pinEvent(const QString &eventId) diff --git a/src/libneochat/neochatroom.h b/src/libneochat/neochatroom.h index a69e9dfae..206785af8 100644 --- a/src/libneochat/neochatroom.h +++ b/src/libneochat/neochatroom.h @@ -642,7 +642,7 @@ private: void cleanupExtraEventRange(Quotient::RoomEventsRange events); void cleanupExtraEvent(const QString &eventId); - std::unordered_map> m_memberObjects; + std::unordered_map m_memberObjects; static std::function m_hiddenFilter; private Q_SLOTS: