From 484ef0cbcd4f700ac5706dce22b8d4fc58110ffe Mon Sep 17 00:00:00 2001 From: ikisialeu <36271792+ikisialeu@users.noreply.github.com> Date: Wed, 4 Apr 2018 10:23:59 +0300 Subject: [PATCH] feat: validate user regex (#1766) Validate that user-inputted regex for package patterns are valid RegExp(). Closes #1450 --- lib/config/validation.js | 13 +++++++++++++ test/config/__snapshots__/validation.spec.js.snap | 8 ++++++++ test/config/validation.spec.js | 6 +++++- 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/lib/config/validation.js b/lib/config/validation.js index 569017fd50..483c61224f 100644 --- a/lib/config/validation.js +++ b/lib/config/validation.js @@ -158,6 +158,19 @@ async function validateConfig(config) { } } } + if ( + (key === 'packagePatterns' || key === 'excludePackagePatterns') && + !(val && val.length === 1 && val[0] === '*') + ) { + try { + RegExp(val); + } catch (e) { + errors.push({ + depName: 'Configuration Error', + message: `Invalid regExp for ${key}: \`${val}\``, + }); + } + } } } else if (type === 'string') { if (!isString(val)) { diff --git a/test/config/__snapshots__/validation.spec.js.snap b/test/config/__snapshots__/validation.spec.js.snap index 1822f6a43d..67c86390eb 100644 --- a/test/config/__snapshots__/validation.spec.js.snap +++ b/test/config/__snapshots__/validation.spec.js.snap @@ -18,6 +18,14 @@ Array [ "depName": "Configuration Error", "message": "Invalid timezone: Asia", }, + Object { + "depName": "Configuration Error", + "message": "Configuration option \`packagePatterns\` should be a list (Array)", + }, + Object { + "depName": "Configuration Error", + "message": "Invalid regExp for excludePackagePatterns: \`abc ([a-z]+) ([a-z]+))\`", + }, Object { "depName": "Configuration Error", "message": "Configuration option \`labels\` should be a list (Array)", diff --git a/test/config/validation.spec.js b/test/config/validation.spec.js index 7089be9fd8..905ab03f7e 100644 --- a/test/config/validation.spec.js +++ b/test/config/validation.spec.js @@ -7,6 +7,8 @@ describe('config/validation', () => { foo: 1, schedule: ['after 5pm'], timezone: 'Asia/Singapore', + packagePatterns: ['*'], + excludePackagePatterns: ['[a-z]'], prBody: 'some-body', lockFileMaintenance: { bar: 2, @@ -25,6 +27,8 @@ describe('config/validation', () => { enabled: 1, schedule: ['every 15 mins every weekday'], timezone: 'Asia', + packagePatterns: 'abc ([a-z]+) ([a-z]+))', + excludePackagePatterns: ['abc ([a-z]+) ([a-z]+))'], labels: 5, semanticCommitType: 7, lockFileMaintenance: false, @@ -45,7 +49,7 @@ describe('config/validation', () => { ); expect(warnings).toHaveLength(0); expect(errors).toMatchSnapshot(); - expect(errors).toHaveLength(11); + expect(errors).toHaveLength(13); }); }); }); -- GitLab