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", "Error",
); );
const preservedContentFields = { const preservedContentFields = [ "m.relates_to" ];
"m.room.message": [ "m.relates_to" ]
};
export class PendingEvent { export class PendingEvent {
constructor({data, remove, emitUpdate, attachments}) { constructor({data, remove, emitUpdate, attachments}) {
@ -100,17 +98,22 @@ export class PendingEvent {
this._emitUpdate("status"); this._emitUpdate("status");
} }
get cleanedContent() {
const content = Object.assign({}, this._data.content);
for (const field of preservedContentFields) {
delete content[field];
}
return content;
}
_preserveContentFields(into) { _preserveContentFields(into) {
const preservedFields = preservedContentFields[this.eventType];
if (preservedFields) {
const content = this._data.content; const content = this._data.content;
for (const field of preservedFields) { for (const field of preservedContentFields) {
if (content[field] !== undefined) { if (content[field] !== undefined) {
into[field] = content[field]; into[field] = content[field];
} }
} }
} }
}
setEncrypted(type, content) { setEncrypted(type, content) {
this._preserveContentFields(content); this._preserveContentFields(content);

View file

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