1
0
mirror of https://github.com/matrix-org/matrix-js-sdk.git synced 2025-11-25 05:23:13 +03:00

Ensure unencrypted fields get exposed by getEffectiveEvent()

Fixes https://github.com/vector-im/element-web/issues/19062
This commit is contained in:
Travis Ralston
2021-09-18 16:26:08 -06:00
parent 2bd60f4160
commit 9f42647a75

View File

@@ -285,8 +285,28 @@ export class MatrixEvent extends EventEmitter {
* @returns {IEvent} The event in wire format. * @returns {IEvent} The event in wire format.
*/ */
public getEffectiveEvent(): IEvent { public getEffectiveEvent(): IEvent {
// clearEvent doesn't have all the fields, so we'll copy what we can from this.event const content = Object.assign({}, this.getContent()); // clone for mutation
return Object.assign({}, this.event, this.clearEvent) as IEvent;
if (this.getWireType() === EventType.RoomMessageEncrypted) {
// Encrypted events sometimes aren't symmetrical on the `content` so we'll copy
// that over too, but only for missing properties. We don't copy over mismatches
// between the plain and decrypted copies of `content` because we assume that the
// app is relying on the decrypted version, so we want to expose that as a source
// of truth here too.
for (const [key, value] of Object.entries(this.getWireContent())) {
// Skip fields from the encrypted event schema though - we don't want to leak
// these.
if (["algorithm", "ciphertext", "device_id", "sender_key", "session_id"].includes(key)) {
continue;
}
if (content[key] === undefined) content[key] = value;
}
}
// clearEvent doesn't have all the fields, so we'll copy what we can from this.event.
// We also copy over our "fixed" content key.
return Object.assign({}, this.event, this.clearEvent, { content }) as IEvent;
} }
/** /**