From 9bb1ab98dcb695bb8045a2910969b0b381bf686c Mon Sep 17 00:00:00 2001 From: Jakub Zalewski Date: Mon, 27 Jan 2025 14:51:46 +0100 Subject: [PATCH] Placeholder for #2164 Squashed commit of the following: commit b09864364ca6c47b458566ff34eb6df81d7b2c3b Author: Jakub Zalewski Date: Fri Jan 24 14:39:34 2025 +0100 Clone snapshot to avoid mangling it in the timeline --- packages/sdk/src/streamStateView_Mls.ts | 30 +++++++++++++------------ 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/packages/sdk/src/streamStateView_Mls.ts b/packages/sdk/src/streamStateView_Mls.ts index 9e2749eaab..589c6632a0 100644 --- a/packages/sdk/src/streamStateView_Mls.ts +++ b/packages/sdk/src/streamStateView_Mls.ts @@ -19,7 +19,7 @@ export class StreamStateView_Mls extends StreamStateView_AbstractContent { groupInfoMessage?: Uint8Array members: { [key: string]: PlainMessage } = {} epochSecrets: { [key: string]: Uint8Array } = {} - pendingKeyPackages: { [key: string]: MemberPayload_KeyPackage } = {} + pendingKeyPackages: { [key: string]: PlainMessage } = {} welcomeMessagesMiniblockNum: { [key: string]: bigint } = {} constructor(streamId: string) { @@ -28,12 +28,14 @@ export class StreamStateView_Mls extends StreamStateView_AbstractContent { } applySnapshot(content: MemberPayload_Snapshot_Mls): void { - this.externalGroupSnapshot = content.externalGroupSnapshot - this.groupInfoMessage = content.groupInfoMessage - this.members = content.members - this.epochSecrets = content.epochSecrets - this.pendingKeyPackages = content.pendingKeyPackages - this.welcomeMessagesMiniblockNum = content.welcomeMessagesMiniblockNum + // Clone the protobuf to prevent mangling it + const cloned = content.clone() + this.externalGroupSnapshot = cloned.externalGroupSnapshot + this.groupInfoMessage = cloned.groupInfoMessage + this.members = cloned.members + this.epochSecrets = cloned.epochSecrets + this.pendingKeyPackages = cloned.pendingKeyPackages + this.welcomeMessagesMiniblockNum = cloned.welcomeMessagesMiniblockNum } appendEvent( @@ -48,27 +50,27 @@ export class StreamStateView_Mls extends StreamStateView_AbstractContent { case 'initializeGroup': this.externalGroupSnapshot = mlsEvent.content.value.externalGroupSnapshot this.groupInfoMessage = mlsEvent.content.value.groupInfoMessage - this.members[event.creatorUserId] = { - signaturePublicKeys: [mlsEvent.content.value.signaturePublicKey], - } + this.addSignaturePublicKey( + event.creatorUserId, + mlsEvent.content.value.clone().signaturePublicKey, + ) break case 'externalJoin': this.addSignaturePublicKey( event.creatorUserId, - mlsEvent.content.value.signaturePublicKey, + mlsEvent.content.value.clone().signaturePublicKey, ) break case 'epochSecrets': for (const secret of mlsEvent.content.value.secrets) { if (!this.epochSecrets[secret.epoch.toString()]) { - this.epochSecrets[secret.epoch.toString()] = secret.secret + this.epochSecrets[secret.epoch.toString()] = secret.clone().secret } } break case 'keyPackage': this.pendingKeyPackages[bytesToHex(mlsEvent.content.value.signaturePublicKey)] = - mlsEvent.content.value - + mlsEvent.content.value.clone() break case 'welcomeMessage': for (const signatureKey of mlsEvent.content.value.signaturePublicKeys) {