From b684fb451da575cd22419a4e9b0d7eb2ffbb7bb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Veres=20K=C3=A1roly?= Date: Sat, 10 Jan 2026 01:49:29 +0100 Subject: [PATCH] Null check pinned messages after decryption when filling `PinnedMessageModel`. `room()->decryptMessage()` returns null if the message fails to decode. Since elements of `m_pinnedEvents` get directly dereferenced in getEventForIndex, storing null values leads to a segfault. In this case we should retain the EncryptedEvent to let the UI report the error. --- src/timeline/models/pinnedmessagemodel.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/timeline/models/pinnedmessagemodel.cpp b/src/timeline/models/pinnedmessagemodel.cpp index 666bca35b..ab9a6e796 100644 --- a/src/timeline/models/pinnedmessagemodel.cpp +++ b/src/timeline/models/pinnedmessagemodel.cpp @@ -57,7 +57,10 @@ void PinnedMessageModel::fill() beginInsertRows({}, m_pinnedEvents.size(), m_pinnedEvents.size()); auto ev = fromJson>(job->jsonData()); if (auto encEv = eventCast(ev.get())) { - ev = room()->decryptMessage(*encEv); + auto decryptedEvent = room()->decryptMessage(*encEv); + if (decryptedEvent) { + ev = std::move(decryptedEvent); + } } m_pinnedEvents.push_back(std::move(ev)); Q_EMIT newEventAdded(m_pinnedEvents.back().get());