From 77a6ec09fb29f6cf4b8287127dd73be831697a9d Mon Sep 17 00:00:00 2001 From: Koen Kanters Date: Sat, 9 Jan 2021 14:21:01 +0100 Subject: [PATCH] More friendly name checks. https://github.com/Koenkk/zigbee2mqtt/commit/d7c74ca3ad65dc8cc0366d321c5494c4f3b7a51b --- lib/util/utils.js | 3 +++ test/settings.test.js | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/lib/util/utils.js b/lib/util/utils.js index 6d61c185d..fb51e2b72 100644 --- a/lib/util/utils.js +++ b/lib/util/utils.js @@ -196,6 +196,9 @@ function validateFriendlyName(name) { } } + if (name.length === 0) errors.push(`friendly_name shoud atleast be 1 char long`); + if (name.endsWith('/')) errors.push(`friendly_name is not allowed to end with /`); + if (name.endsWith(String.fromCharCode(0))) errors.push(`friendly_name is not allowed to contain null char`); if (endpointNames.includes(name)) errors.push(`Following friendly_name are not allowed: '${endpointNames}'`); if (name.match(/.*\/\d*$/)) errors.push(`Friendly name cannot end with a "/DIGIT" ('${name}')`); if (name.includes('#') || name.includes('+')) { diff --git a/test/settings.test.js b/test/settings.test.js index 97240fdbd..3dc140e87 100644 --- a/test/settings.test.js +++ b/test/settings.test.js @@ -717,6 +717,42 @@ describe('Settings', () => { expect(settings.validate()).toEqual(expect.arrayContaining([error])); }); + it('Configuration friendly name cannot be empty', async () => { + write(configurationFile, { + ...minimalConfig, + devices: {'0x0017880104e45519': {friendly_name: '', retain: false}}, + }); + + settings._reRead(); + + const error = `friendly_name shoud atleast be 1 char long`; + expect(settings.validate()).toEqual(expect.arrayContaining([error])); + }); + + it('Configuration friendly name cannot end with /', async () => { + write(configurationFile, { + ...minimalConfig, + devices: {'0x0017880104e45519': {friendly_name: 'blaa/', retain: false}}, + }); + + settings._reRead(); + + const error = `friendly_name is not allowed to end with /`; + expect(settings.validate()).toEqual(expect.arrayContaining([error])); + }); + + it('Configuration friendly name cannot contain null char', async () => { + write(configurationFile, { + ...minimalConfig, + devices: {'0x0017880104e45519': {friendly_name: 'blaa/blaa' + String.fromCharCode(0), retain: false}}, + }); + + settings._reRead(); + + const error = `friendly_name is not allowed to contain null char`; + expect(settings.validate()).toEqual(expect.arrayContaining([error])); + }); + it('Configuration shouldnt be valid when friendly_name ends with /DIGIT', async () => { write(configurationFile, { ...minimalConfig,