diff --git a/ts/sql/Server.ts b/ts/sql/Server.ts index 8ce1906274..12e6011639 100644 --- a/ts/sql/Server.ts +++ b/ts/sql/Server.ts @@ -2580,7 +2580,11 @@ function saveMessageAttachment({ : null, backupMediaName: attachment.backupLocator?.mediaName, backupCdnNumber: attachment.backupLocator?.cdnNumber, - incrementalMac: attachment.incrementalMac, + incrementalMac: + // resilience to Uint8Array-stored incrementalMac values + typeof attachment.incrementalMac === 'string' + ? attachment.incrementalMac + : null, incrementalMacChunkSize: attachment.chunkSize, isReencryptableToSameDigest: convertOptionalBooleanToNullableInteger( attachment.isReencryptableToSameDigest diff --git a/ts/test-electron/normalizedAttachments_test.ts b/ts/test-electron/normalizedAttachments_test.ts index d060d8f56d..b474f009fd 100644 --- a/ts/test-electron/normalizedAttachments_test.ts +++ b/ts/test-electron/normalizedAttachments_test.ts @@ -605,4 +605,32 @@ describe('normalizes attachment references', () => { assert(messageFromDB, 'message was saved'); assert.deepEqual(messageFromDB, message); }); + it('handles bad data', async () => { + const attachment: AttachmentType = { + ...composeAttachment(), + uploadTimestamp: { + low: 6174, + high: 0, + unsigned: false, + } as unknown as number, + incrementalMac: Bytes.fromString('incrementalMac') as unknown as string, + }; + const message = composeMessage(Date.now(), { + attachments: [attachment], + }); + + await DataWriter.saveMessage(message, { + forceSave: true, + ourAci: generateAci(), + postSaveUpdates: () => Promise.resolve(), + }); + + const messageFromDB = await DataReader.getMessageById(message.id); + assert(messageFromDB, 'message was saved'); + assert.deepEqual(messageFromDB.attachments?.[0], { + ...attachment, + uploadTimestamp: undefined, + incrementalMac: undefined, + }); + }); }); diff --git a/ts/types/Message2.ts b/ts/types/Message2.ts index c8c3b49f73..202235b864 100644 --- a/ts/types/Message2.ts +++ b/ts/types/Message2.ts @@ -690,6 +690,10 @@ const toVersion14 = _withSchemaVersion({ } ), }); +const toVersion15 = _withSchemaVersion({ + schemaVersion: 15, + upgrade: noopUpgrade, +}); const VERSIONS = [ toVersion0, @@ -707,6 +711,7 @@ const VERSIONS = [ toVersion12, toVersion13, toVersion14, + toVersion15, ]; export const CURRENT_SCHEMA_VERSION = VERSIONS.length - 1;