From fcd73881692d9fabb63872576ba28e30ff852091 Mon Sep 17 00:00:00 2001 From: Christoph Tavan Date: Thu, 17 Mar 2022 18:27:50 +0100 Subject: [PATCH] fix: handle error when parameter is not set in v3 and v5 (#622) * fix: unhandle error when parameter is not set in v3 and v5 * test: add unit test for v3 and v5 to test undefined/null `namespace` Authored-by: rzkytmgr --- src/v35.js | 2 +- test/unit/v35.test.js | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/v35.js b/src/v35.js index 35a7ee63..1e56eea5 100644 --- a/src/v35.js +++ b/src/v35.js @@ -26,7 +26,7 @@ export default function v35(name, version, hashfunc) { namespace = parse(namespace); } - if (namespace.length !== 16) { + if (namespace?.length !== 16) { throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); } diff --git a/test/unit/v35.test.js b/test/unit/v35.test.js index 65f1e752..b0b26433 100644 --- a/test/unit/v35.test.js +++ b/test/unit/v35.test.js @@ -148,6 +148,24 @@ describe('v35', () => { assert.deepEqual(buf, ['landmaster', 'landmaster', 'landmaster'].concat(testBuf)); }); + test('v3 undefined/null', () => { + assert.throws(() => { + v3(); + }); + + assert.throws(() => { + v3('hello'); + }); + + assert.throws(() => { + v3('hello.example.com', undefined); + }); + + assert.throws(() => { + v3('hello.example.com', null, new Array(16)); + }); + }); + test('v5', () => { // Expect to get the same results as http://tools.adjet.org/uuid-v5 assert.strictEqual(v5('hello.example.com', v5.DNS), 'fdda765f-fc57-5604-a269-52a7df8164ec'); @@ -229,6 +247,24 @@ describe('v35', () => { assert.deepEqual(buf, ['landmaster', 'landmaster', 'landmaster'].concat(testBuf)); }); + test('v5 undefined/null', () => { + assert.throws(() => { + v5(); + }); + + assert.throws(() => { + v5('hello'); + }); + + assert.throws(() => { + v5('hello.example.com', undefined); + }); + + assert.throws(() => { + v5('hello.example.com', null, new Array(16)); + }); + }); + test('v3/v5 constants', () => { assert.strictEqual(v3.DNS, '6ba7b810-9dad-11d1-80b4-00c04fd430c8'); assert.strictEqual(v3.URL, '6ba7b811-9dad-11d1-80b4-00c04fd430c8');