Pārlūkot izejas kodu

11780: invalid reg value can cause unexpected behaviour

SamuelToh 7 gadi atpakaļ
vecāks
revīzija
6bfbdbe20b

+ 15 - 0
public/app/core/specs/kbn.test.ts

@@ -0,0 +1,15 @@
+import kbn from '../utils/kbn';
+
+describe('stringToJsRegex', () => {
+  it('should parse the valid regex value', () => {
+    const output = kbn.stringToJsRegex("/validRegexp/");
+    expect(output).toBeInstanceOf(RegExp);
+  });
+
+  it('should throw error on invalid regex value', () => {
+    const input = "/etc/hostname";
+    expect(() => {
+      kbn.stringToJsRegex(input);
+    }).toThrow();
+  });
+});

+ 7 - 2
public/app/core/time_series2.ts

@@ -1,4 +1,5 @@
 import kbn from 'app/core/utils/kbn';
+import { appEvents } from 'app/core/core';
 import { getFlotTickDecimals } from 'app/core/utils/ticks';
 import _ from 'lodash';
 import { getValueFormat } from '@grafana/ui';
@@ -9,8 +10,12 @@ function matchSeriesOverride(aliasOrRegex, seriesAlias) {
   }
 
   if (aliasOrRegex[0] === '/') {
-    const regex = kbn.stringToJsRegex(aliasOrRegex);
-    return seriesAlias.match(regex) != null;
+    try {
+      const regex = kbn.stringToJsRegex(aliasOrRegex);
+      return seriesAlias.match(regex) != null;
+    } catch (e) {
+      return appEvents.emit('alert-error', ['Invalid aliasOrRegex value.', e.message]);
+    }
   }
 
   return aliasOrRegex === seriesAlias;

+ 5 - 0
public/app/core/utils/kbn.ts

@@ -234,6 +234,11 @@ kbn.stringToJsRegex = str => {
   }
 
   const match = str.match(new RegExp('^/(.*?)/(g?i?m?y?)$'));
+
+  if (!match) {
+    throw new Error(`'${str}' is not a valid regular expression.`);
+  }
+
   return new RegExp(match[1], match[2]);
 };