Fix subtle erroneous event casts

Sometimes, the previous code would static_cast an EncryptedEvent to a RoomMessageEvent.
This was mostly unnoticed, since the types are similar enough.
This commit is contained in:
Tobias Fella
2023-10-25 20:41:09 +02:00
parent b575b1e700
commit 410add04fb

View File

@@ -158,8 +158,9 @@ void MessageEventModel::setRoom(NeoChatRoom *room)
}); });
connect(m_currentRoom, &Room::aboutToAddHistoricalMessages, this, [this](RoomEventsRange events) { connect(m_currentRoom, &Room::aboutToAddHistoricalMessages, this, [this](RoomEventsRange events) {
for (auto &event : events) { for (auto &event : events) {
RoomMessageEvent *message = dynamic_cast<RoomMessageEvent *>(event.get()); if (const auto &roomMessageEvent = dynamic_cast<RoomMessageEvent *>(event.get())) {
createEventObjects(message); createEventObjects(roomMessageEvent);
}
} }
if (rowCount() > 0) { if (rowCount() > 0) {
rowBelowInserted = rowCount() - 1; // See #312 rowBelowInserted = rowCount() - 1; // See #312
@@ -228,7 +229,9 @@ void MessageEventModel::setRoom(NeoChatRoom *room)
} }
const auto eventIt = m_currentRoom->findInTimeline(eventId); const auto eventIt = m_currentRoom->findInTimeline(eventId);
if (eventIt != m_currentRoom->historyEdge()) { if (eventIt != m_currentRoom->historyEdge()) {
createEventObjects(static_cast<const RoomMessageEvent *>(&**eventIt)); if (const auto &event = dynamic_cast<const RoomMessageEvent *>(&**eventIt)) {
createEventObjects(event);
}
} }
refreshEventRoles(eventId, {ReactionRole, ShowReactionsRole, Qt::DisplayRole}); refreshEventRoles(eventId, {ReactionRole, ShowReactionsRole, Qt::DisplayRole});
}); });
@@ -704,10 +707,6 @@ int MessageEventModel::eventIdToRow(const QString &eventID) const
void MessageEventModel::createEventObjects(const Quotient::RoomMessageEvent *event) void MessageEventModel::createEventObjects(const Quotient::RoomMessageEvent *event)
{ {
if (event == nullptr) {
return;
}
auto eventId = event->id(); auto eventId = event->id();
EventHandler eventHandler; EventHandler eventHandler;