From b87fad23d88c1d7edf2a8f66ef25bbac9d2ae322 Mon Sep 17 00:00:00 2001 From: Henri Bergius Date: Mon, 25 Aug 2025 16:59:35 -0400 Subject: [PATCH] Catch packet decoding errors (#809) * Catch decoding errors, refs #808 * Catch packet handling errors * Add missing type --- .../core/src/utils/transform/decodePacket.ts | 28 +++++++++++++++---- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/packages/core/src/utils/transform/decodePacket.ts b/packages/core/src/utils/transform/decodePacket.ts index d44e52cf..257ff0bf 100644 --- a/packages/core/src/utils/transform/decodePacket.ts +++ b/packages/core/src/utils/transform/decodePacket.ts @@ -24,16 +24,34 @@ export const decodePacket = (device: MeshDevice) => break; } case "packet": { - const decodedMessage = fromBinary( - Protobuf.Mesh.FromRadioSchema, - chunk.data, - ); + let decodedMessage: Protobuf.Mesh.FromRadio; + try { + decodedMessage = fromBinary( + Protobuf.Mesh.FromRadioSchema, + chunk.data, + ); + } catch (e) { + device.log.error( + Types.Emitter[Types.Emitter.HandleFromRadio], + "⚠️ Received undecodable packet", + e, + ); + break; + } device.events.onFromRadio.dispatch(decodedMessage); /** @todo Add map here when `all=true` gets fixed. */ switch (decodedMessage.payloadVariant.case) { case "packet": { - device.handleMeshPacket(decodedMessage.payloadVariant.value); + try { + device.handleMeshPacket(decodedMessage.payloadVariant.value); + } catch (e) { + device.log.error( + Types.Emitter[Types.Emitter.HandleFromRadio], + "⚠️ Unable to handle mesh packet", + e, + ); + } break; }