Strip relates_to from encrypted events' original contents.

This commit is contained in:
Danila Fedorin 2021-08-04 10:26:03 -07:00
parent fa985f8f16
commit 2375bf061c
2 changed files with 15 additions and 11 deletions

View file

@ -28,9 +28,7 @@ export const SendStatus = createEnum(
"Error",
);
const preservedContentFields = {
"m.room.message": [ "m.relates_to" ]
};
const preservedContentFields = [ "m.relates_to" ];
export class PendingEvent {
constructor({data, remove, emitUpdate, attachments}) {
@ -100,14 +98,19 @@ export class PendingEvent {
this._emitUpdate("status");
}
get cleanedContent() {
const content = Object.assign({}, this._data.content);
for (const field of preservedContentFields) {
delete content[field];
}
return content;
}
_preserveContentFields(into) {
const preservedFields = preservedContentFields[this.eventType];
if (preservedFields) {
const content = this._data.content;
for (const field of preservedFields) {
if (content[field] !== undefined) {
into[field] = content[field];
}
const content = this._data.content;
for (const field of preservedContentFields) {
if (content[field] !== undefined) {
into[field] = content[field];
}
}
}

View file

@ -97,8 +97,9 @@ export class SendQueue {
}
if (pendingEvent.needsEncryption) {
pendingEvent.setEncrypting();
const cleanedContent = pendingEvent.cleanedContent;
const {type, content} = await log.wrap("encrypt", log => this._roomEncryption.encrypt(
pendingEvent.eventType, pendingEvent.content, this._hsApi, log));
pendingEvent.eventType, cleanedContent, this._hsApi, log));
pendingEvent.setEncrypted(type, content);
await this._tryUpdateEvent(pendingEvent);
}