From f6e26c391c97230ca2ad5f9de175c83bc87e3c0c Mon Sep 17 00:00:00 2001 From: Sam <3194321+SamHellawell@users.noreply.github.com> Date: Mon, 20 Mar 2023 21:45:06 +0000 Subject: [PATCH] Throw error when trying to encode undefined value (#15) * Throw error when trying to encode undefined value Signed-off-by: Samuel Hellawell * test case Signed-off-by: Samuel Hellawell --------- Signed-off-by: Samuel Hellawell --- package.json | 2 +- src/bbs-plus/encoder.ts | 3 +++ tests/composite-proofs/msg-js-obj/util.spec.ts | 3 +++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 21e91e97..d21bcbfa 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@docknetwork/crypto-wasm-ts", - "version": "0.31.1", + "version": "0.31.2", "description": "Typescript abstractions over Dock's Rust crypto library's WASM wrapper", "homepage": "https://github.com/docknetwork/crypto-wasm-ts", "main": "lib/index.js", diff --git a/src/bbs-plus/encoder.ts b/src/bbs-plus/encoder.ts index 69dda368..712b8a92 100644 --- a/src/bbs-plus/encoder.ts +++ b/src/bbs-plus/encoder.ts @@ -41,6 +41,9 @@ export class Encoder { encodeMessage(name: string, value: unknown, strict = false): Uint8Array { const encoder = this.encoders?.get(name) || this.defaultEncoder; if (encoder !== undefined) { + if (typeof value === undefined) { + throw new Error(`Cannot encode message with name ${name} as it is undefined`); + } return encoder(value); } else { if (!strict && value instanceof Uint8Array) { diff --git a/tests/composite-proofs/msg-js-obj/util.spec.ts b/tests/composite-proofs/msg-js-obj/util.spec.ts index 40e0804e..8da76b3b 100644 --- a/tests/composite-proofs/msg-js-obj/util.spec.ts +++ b/tests/composite-proofs/msg-js-obj/util.spec.ts @@ -73,6 +73,9 @@ describe('Utils', () => { encoders1.set('foo', Encoder.positiveIntegerEncoder()); const encoder1 = new Encoder(encoders1); + // Throws for undefined message + expect(() => encoder1.encodeMessage('bar', undefined)).toThrow(); + // Throws for unknown message name when no default encoder expect(() => encoder1.encodeMessage('bar', 6)).toThrow(); expect(() => encoder1.encodeMessageObject({ bar: 6, foo: 10 })).toThrow();