From 5cd48a05652f146475efc7c8a646eb601c51954f Mon Sep 17 00:00:00 2001 From: Joel Wetzell Date: Fri, 15 Sep 2023 21:41:30 -0500 Subject: [PATCH] add some exception handling --- src/encoders/chunk.ts | 8 ++++++++ src/encoders/packet-header-chunk.ts | 28 +++++++++++++++++++++++++++- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/encoders/chunk.ts b/src/encoders/chunk.ts index 7295547..186034e 100644 --- a/src/encoders/chunk.ts +++ b/src/encoders/chunk.ts @@ -1,4 +1,12 @@ export default (id: number, chunkData: Buffer, hasSubchunks: boolean): Buffer => { + if (!Number.isInteger(id)) { + throw new Error('chunk id must be an integer'); + } + + if (id > 0xffff || id < 0) { + throw new Error('chunk id must be >= 0 and <= 65535'); + } + if (chunkData.length > 0x7fff) { throw new Error('chunkData can not be greater than 32767 bytes'); } diff --git a/src/encoders/packet-header-chunk.ts b/src/encoders/packet-header-chunk.ts index 6a45df1..9daab57 100644 --- a/src/encoders/packet-header-chunk.ts +++ b/src/encoders/packet-header-chunk.ts @@ -7,9 +7,35 @@ export default ( frameId: number, framePacketCount: number ): Buffer => { - if (frameId > 255) { + if (!Number.isInteger(versionHigh)) { + throw new Error('version high must be an integer'); + } + if (!Number.isInteger(versionLow)) { + throw new Error('version low must be an integer'); + } + if (!Number.isInteger(frameId)) { + throw new Error('frame id must be an integer'); + } + if (!Number.isInteger(framePacketCount)) { + throw new Error('frame packet count must be an integer'); + } + + if (versionHigh > 255 || versionHigh < 0) { + throw new Error('version high must be >= 0 and <= 255'); + } + + if (versionLow > 255 || versionLow < 0) { + throw new Error('version low must be >= 0 and <= 255'); + } + + if (frameId > 255 || frameId < 0) { throw new Error('frame id must be >= 0 and <= 255'); } + + if (framePacketCount > 255 || framePacketCount < 0) { + throw new Error('frame packet count must be >= 0 and <= 255'); + } + const packetHeader = Buffer.alloc(12); packetHeader.writeBigUInt64LE(BigInt(timestamp)); packetHeader.writeUint8(versionHigh, 8);