From 6cb6316afdc6e1803a7311e76ff83cfcc6e3193d Mon Sep 17 00:00:00 2001 From: SmithThe4th Date: Tue, 15 Jul 2025 17:21:15 -0400 Subject: [PATCH] Handle string, enc string (split is not a function) errors during browser extension deserialization (#15586) --- .../src/vault/models/view/attachment.view.ts | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/libs/common/src/vault/models/view/attachment.view.ts b/libs/common/src/vault/models/view/attachment.view.ts index d943d21367d..840625dd2d0 100644 --- a/libs/common/src/vault/models/view/attachment.view.ts +++ b/libs/common/src/vault/models/view/attachment.view.ts @@ -45,7 +45,17 @@ export class AttachmentView implements View { static fromJSON(obj: Partial>): AttachmentView { const key = obj.key == null ? null : SymmetricCryptoKey.fromJSON(obj.key); - const encryptedKey = obj.encryptedKey == null ? undefined : new EncString(obj.encryptedKey); + + let encryptedKey: EncString | undefined; + if (obj.encryptedKey != null) { + if (typeof obj.encryptedKey === "string") { + // If the key is a string, we need to parse it as EncString + encryptedKey = EncString.fromJSON(obj.encryptedKey); + } else if ((obj.encryptedKey as any) instanceof EncString) { + // If the key is already an EncString instance, we can use it directly + encryptedKey = obj.encryptedKey; + } + } return Object.assign(new AttachmentView(), obj, { key: key, encryptedKey: encryptedKey }); } @@ -80,8 +90,8 @@ export class AttachmentView implements View { view.sizeName = obj.sizeName ?? null; view.fileName = obj.fileName ?? null; // TODO: PM-23005 - Temporary field, should be removed when encrypted migration is complete - view.key = obj.key ? SymmetricCryptoKey.fromString(obj.decryptedKey) : null; - view.encryptedKey = new EncString(obj.key); + view.key = obj.decryptedKey ? SymmetricCryptoKey.fromString(obj.decryptedKey) : null; + view.encryptedKey = obj.key ? new EncString(obj.key) : undefined; return view; }