From d4163fe2fb934a1097b9737ebeb38d02ab9fa9ef Mon Sep 17 00:00:00 2001 From: Rhys Arkins <rhys@arkins.net> Date: Fri, 13 Apr 2018 06:52:08 +0200 Subject: [PATCH] fix: test for unsafe regex and warn --- lib/config/validation.js | 7 +++++++ package.json | 5 ++++- test/config/__snapshots__/validation.spec.js.snap | 4 ++++ test/config/validation.spec.js | 4 ++-- yarn.lock | 2 +- 5 files changed, 18 insertions(+), 4 deletions(-) diff --git a/lib/config/validation.js b/lib/config/validation.js index a95fab4202..456c23d91c 100644 --- a/lib/config/validation.js +++ b/lib/config/validation.js @@ -5,6 +5,7 @@ const { hasValidSchedule, hasValidTimezone, } = require('../workers/branch/schedule'); +const safe = require('safe-regex'); let optionTypes; @@ -167,6 +168,12 @@ async function validateConfig(config, isPreset, parentPath) { ) { try { RegExp(val); + if (!safe(val)) { + errors.push({ + depName: 'Configuration Error', + message: `Unsafe regExp for ${currentPath}: \`${val}\``, + }); + } } catch (e) { errors.push({ depName: 'Configuration Error', diff --git a/package.json b/package.json index 03f541db9d..328ceb5aab 100644 --- a/package.json +++ b/package.json @@ -87,6 +87,7 @@ "pnpm": "1.40.0", "registry-auth-token": "3.3.2", "root-require": "0.3.1", + "safe-regex": "1.1.0", "semver": "5.5.0", "semver-stable": "2.0.4", "semver-utils": "1.1.2", @@ -139,7 +140,9 @@ "./test/globals.js" ], "setupTestFrameworkScriptFile": "./test/chai.js", - "snapshotSerializers": ["./test/newline-snapshot-serializer.js"] + "snapshotSerializers": [ + "./test/newline-snapshot-serializer.js" + ] }, "prettier": { "singleQuote": true, diff --git a/test/config/__snapshots__/validation.spec.js.snap b/test/config/__snapshots__/validation.spec.js.snap index d2ac49cb51..7ac7a5b8f5 100644 --- a/test/config/__snapshots__/validation.spec.js.snap +++ b/test/config/__snapshots__/validation.spec.js.snap @@ -65,6 +65,10 @@ Array [ "depName": "Configuration Error", "message": "Invalid configuration option: \`foo\`", }, + Object { + "depName": "Configuration Error", + "message": "Unsafe regExp for packageRules[0].excludePackagePatterns: \`(x+x+)+y\`", + }, Object { "depName": "Configuration Error", "message": "Invalid configuration option: \`lockFileMaintenance.bar\`", diff --git a/test/config/validation.spec.js b/test/config/validation.spec.js index 65614bd55e..883bcdf618 100644 --- a/test/config/validation.spec.js +++ b/test/config/validation.spec.js @@ -10,7 +10,7 @@ describe('config/validation', () => { packageRules: [ { packagePatterns: ['*'], - excludePackagePatterns: ['[a-z]'], + excludePackagePatterns: ['(x+x+)+y'], }, ], prBody: 'some-body', @@ -22,7 +22,7 @@ describe('config/validation', () => { config ); expect(warnings).toHaveLength(0); - expect(errors).toHaveLength(2); + expect(errors).toHaveLength(3); expect(errors).toMatchSnapshot(); }); it('errors for all types', async () => { diff --git a/yarn.lock b/yarn.lock index 9a2953ca76..a941324628 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5649,7 +5649,7 @@ safe-json-stringify@~1: version "1.0.4" resolved "https://registry.yarnpkg.com/safe-json-stringify/-/safe-json-stringify-1.0.4.tgz#81a098f447e4bbc3ff3312a243521bc060ef5911" -safe-regex@^1.1.0: +safe-regex@1.1.0, safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" dependencies: -- GitLab