mirror of
https://github.com/element-hq/element-web
synced 2024-11-27 19:56:47 +03:00
Do proper null-checks on decypted events to fix NPEs
Previously we assumed that a decrypted event has a room_id but this isn't necessarily true for to_device events. It makes sense to ignore events that aren't associated with rooms anyway given that the list we're updating only contains rooms!
This commit is contained in:
parent
a28691b9de
commit
fae7af1a62
1 changed files with 16 additions and 3 deletions
|
@ -90,12 +90,25 @@ class RoomListStore extends Store {
|
|||
// When an event is decrypted, it could mean we need to reorder the room
|
||||
// list because we now know the type of the event.
|
||||
case 'MatrixActions.Event.decrypted': {
|
||||
const room = this._matrixClient.getRoom(payload.event.getRoomId());
|
||||
// We may not have synced or done an initial generation of the lists
|
||||
if (!this._matrixClient || !this._state.ready) break;
|
||||
|
||||
const roomId = payload.event.getRoomId();
|
||||
|
||||
// We may have decrypted an event without a roomId (e.g to_device)
|
||||
if (!roomId) break;
|
||||
|
||||
const room = this._matrixClient.getRoom(roomId);
|
||||
|
||||
// We somehow decrypted an event for a room our client is unaware of
|
||||
if (!room) break;
|
||||
|
||||
const liveTimeline = room.getLiveTimeline();
|
||||
const eventTimeline = room.getTimelineForEvent(payload.event.getId());
|
||||
|
||||
if (!this._state.ready ||
|
||||
liveTimeline !== eventTimeline ||
|
||||
// Either this event was not added to the live timeline (e.g. pagination)
|
||||
// or it doesn't affect the ordering of the room list.
|
||||
if (liveTimeline !== eventTimeline ||
|
||||
!this._eventTriggersRecentReorder(payload.event)
|
||||
) break;
|
||||
this._generateRoomLists();
|
||||
|
|
Loading…
Reference in a new issue