From 603c4af5a8d1e925aa127a6fd30052628c66b196 Mon Sep 17 00:00:00 2001 From: fryorcraken Date: Wed, 1 Oct 2025 15:59:55 +1000 Subject: [PATCH] fix: protect against decoding exceptions --- packages/sds/src/message_channel/message.ts | 86 +++++++++++---------- 1 file changed, 45 insertions(+), 41 deletions(-) diff --git a/packages/sds/src/message_channel/message.ts b/packages/sds/src/message_channel/message.ts index e186124750..638f6c71a0 100644 --- a/packages/sds/src/message_channel/message.ts +++ b/packages/sds/src/message_channel/message.ts @@ -30,56 +30,60 @@ export class Message implements proto_sds_message.SdsMessage { public static decode( data: Uint8Array ): undefined | ContentMessage | SyncMessage | EphemeralMessage { - const { - messageId, - channelId, - senderId, - causalHistory, - lamportTimestamp, - bloomFilter, - content - } = proto_sds_message.SdsMessage.decode(data); - - if (testContentMessage({ lamportTimestamp, content })) { - return new ContentMessage( + try { + const { messageId, channelId, senderId, causalHistory, - lamportTimestamp!, + lamportTimestamp, bloomFilter, - content! - ); - } + content + } = proto_sds_message.SdsMessage.decode(data); - if (testEphemeralMessage({ lamportTimestamp, content })) { - return new EphemeralMessage( - messageId, - channelId, - senderId, - causalHistory, - undefined, - bloomFilter, - content! - ); - } + if (testContentMessage({ lamportTimestamp, content })) { + return new ContentMessage( + messageId, + channelId, + senderId, + causalHistory, + lamportTimestamp!, + bloomFilter, + content! + ); + } - if (testSyncMessage({ lamportTimestamp, content })) { - return new SyncMessage( - messageId, - channelId, - senderId, - causalHistory, - lamportTimestamp!, - bloomFilter, - undefined + if (testEphemeralMessage({ lamportTimestamp, content })) { + return new EphemeralMessage( + messageId, + channelId, + senderId, + causalHistory, + undefined, + bloomFilter, + content! + ); + } + + if (testSyncMessage({ lamportTimestamp, content })) { + return new SyncMessage( + messageId, + channelId, + senderId, + causalHistory, + lamportTimestamp!, + bloomFilter, + undefined + ); + } + log.error( + "message received was of unknown type", + lamportTimestamp, + content ); + } catch (err) { + log.error("failed to decode sds message", err); } - log.error( - "message received was of unknown type", - lamportTimestamp, - content - ); return undefined; } }