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