Skip to content
This repository was archived by the owner on Sep 11, 2024. It is now read-only.

Commit db69166

Browse files
authored
Merge pull request #5851 from matrix-org/t3chguy/fix/8665
Prevent state events being rendered with invalid state keys
2 parents ee9e1a7 + c25df51 commit db69166

File tree

1 file changed

+52
-31
lines changed

1 file changed

+52
-31
lines changed

src/components/views/rooms/EventTile.js

Lines changed: 52 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
/*
2-
Copyright 2015, 2016 OpenMarket Ltd
3-
Copyright 2017 New Vector Ltd
42
Copyright 2019 Michael Telatynski <[email protected]>
5-
Copyright 2019, 2020 The Matrix.org Foundation C.I.C.
3+
Copyright 2019 - 2021 The Matrix.org Foundation C.I.C.
64
75
Licensed under the Apache License, Version 2.0 (the "License");
86
you may not use this file except in compliance with the License.
@@ -17,18 +15,19 @@ See the License for the specific language governing permissions and
1715
limitations under the License.
1816
*/
1917

20-
import ReplyThread from "../elements/ReplyThread";
2118
import React, {createRef} from 'react';
2219
import PropTypes from 'prop-types';
2320
import classNames from "classnames";
2421
import {EventType} from "matrix-js-sdk/src/@types/event";
22+
import {EventStatus} from 'matrix-js-sdk/src/models/event';
23+
24+
import ReplyThread from "../elements/ReplyThread";
2525
import { _t } from '../../../languageHandler';
2626
import * as TextForEvent from "../../../TextForEvent";
2727
import * as sdk from "../../../index";
2828
import dis from '../../../dispatcher/dispatcher';
2929
import SettingsStore from "../../../settings/SettingsStore";
3030
import {Layout, LayoutPropType} from "../../../settings/Layout";
31-
import {EventStatus} from 'matrix-js-sdk/src/models/event';
3231
import {formatTime} from "../../../DateUtils";
3332
import {MatrixClientPeg} from '../../../MatrixClientPeg';
3433
import {ALL_RULE_TYPES} from "../../../mjolnir/BanList";
@@ -43,39 +42,56 @@ import {replaceableComponent} from "../../../utils/replaceableComponent";
4342
import Tooltip from "../elements/Tooltip";
4443

4544
const eventTileTypes = {
46-
'm.room.message': 'messages.MessageEvent',
47-
'm.sticker': 'messages.MessageEvent',
48-
'm.key.verification.cancel': 'messages.MKeyVerificationConclusion',
49-
'm.key.verification.done': 'messages.MKeyVerificationConclusion',
50-
'm.room.encryption': 'messages.EncryptionEvent',
51-
'm.call.invite': 'messages.TextualEvent',
52-
'm.call.answer': 'messages.TextualEvent',
53-
'm.call.hangup': 'messages.TextualEvent',
54-
'm.call.reject': 'messages.TextualEvent',
45+
[EventType.RoomMessage]: 'messages.MessageEvent',
46+
[EventType.Sticker]: 'messages.MessageEvent',
47+
[EventType.KeyVerificationCancel]: 'messages.MKeyVerificationConclusion',
48+
[EventType.KeyVerificationDone]: 'messages.MKeyVerificationConclusion',
49+
[EventType.CallInvite]: 'messages.TextualEvent',
50+
[EventType.CallAnswer]: 'messages.TextualEvent',
51+
[EventType.CallHangup]: 'messages.TextualEvent',
52+
[EventType.CallReject]: 'messages.TextualEvent',
5553
};
5654

5755
const stateEventTileTypes = {
58-
'm.room.encryption': 'messages.EncryptionEvent',
59-
'm.room.canonical_alias': 'messages.TextualEvent',
60-
'm.room.create': 'messages.RoomCreate',
61-
'm.room.member': 'messages.TextualEvent',
62-
'm.room.name': 'messages.TextualEvent',
63-
'm.room.avatar': 'messages.RoomAvatarEvent',
64-
'm.room.third_party_invite': 'messages.TextualEvent',
65-
'm.room.history_visibility': 'messages.TextualEvent',
66-
'm.room.topic': 'messages.TextualEvent',
67-
'm.room.power_levels': 'messages.TextualEvent',
68-
'm.room.pinned_events': 'messages.TextualEvent',
69-
'm.room.server_acl': 'messages.TextualEvent',
56+
[EventType.RoomEncryption]: 'messages.EncryptionEvent',
57+
[EventType.RoomCanonicalAlias]: 'messages.TextualEvent',
58+
[EventType.RoomCreate]: 'messages.RoomCreate',
59+
[EventType.RoomMember]: 'messages.TextualEvent',
60+
[EventType.RoomName]: 'messages.TextualEvent',
61+
[EventType.RoomAvatar]: 'messages.RoomAvatarEvent',
62+
[EventType.RoomThirdPartyInvite]: 'messages.TextualEvent',
63+
[EventType.RoomHistoryVisibility]: 'messages.TextualEvent',
64+
[EventType.RoomTopic]: 'messages.TextualEvent',
65+
[EventType.RoomPowerLevels]: 'messages.TextualEvent',
66+
[EventType.RoomPinnedEvents]: 'messages.TextualEvent',
67+
[EventType.RoomServerAcl]: 'messages.TextualEvent',
7068
// TODO: Enable support for m.widget event type (https://github.com/vector-im/element-web/issues/13111)
7169
'im.vector.modular.widgets': 'messages.TextualEvent',
7270
[WIDGET_LAYOUT_EVENT_TYPE]: 'messages.TextualEvent',
73-
'm.room.tombstone': 'messages.TextualEvent',
74-
'm.room.join_rules': 'messages.TextualEvent',
75-
'm.room.guest_access': 'messages.TextualEvent',
76-
'm.room.related_groups': 'messages.TextualEvent',
71+
[EventType.RoomTombstone]: 'messages.TextualEvent',
72+
[EventType.RoomJoinRules]: 'messages.TextualEvent',
73+
[EventType.RoomGuestAccess]: 'messages.TextualEvent',
74+
'm.room.related_groups': 'messages.TextualEvent', // legacy communities flair
7775
};
7876

77+
const stateEventSingular = new Set([
78+
EventType.RoomEncryption,
79+
EventType.RoomCanonicalAlias,
80+
EventType.RoomCreate,
81+
EventType.RoomName,
82+
EventType.RoomAvatar,
83+
EventType.RoomHistoryVisibility,
84+
EventType.RoomTopic,
85+
EventType.RoomPowerLevels,
86+
EventType.RoomPinnedEvents,
87+
EventType.RoomServerAcl,
88+
WIDGET_LAYOUT_EVENT_TYPE,
89+
EventType.RoomTombstone,
90+
EventType.RoomJoinRules,
91+
EventType.RoomGuestAccess,
92+
'm.room.related_groups',
93+
]);
94+
7995
// Add all the Mjolnir stuff to the renderer
8096
for (const evType of ALL_RULE_TYPES) {
8197
stateEventTileTypes[evType] = 'messages.TextualEvent';
@@ -132,7 +148,12 @@ export function getHandlerTile(ev) {
132148
}
133149
}
134150

135-
return ev.isState() ? stateEventTileTypes[type] : eventTileTypes[type];
151+
if (ev.isState()) {
152+
if (stateEventSingular.has(type) && ev.getStateKey() !== "") return undefined;
153+
return stateEventTileTypes[type];
154+
}
155+
156+
return eventTileTypes[type];
136157
}
137158

138159
const MAX_READ_AVATARS = 5;

0 commit comments

Comments
 (0)