From 75156324f45e1aca193ca9d67f5c7f0499e9327b Mon Sep 17 00:00:00 2001 From: Ashley Harrison Date: Fri, 14 Mar 2025 13:27:25 +0000 Subject: [PATCH] Chore: fix some codeql violations (#101958) * fix some codeql violations * just check at start --- .../grafana-data/src/datetime/rangeutil.ts | 2 +- .../transformers/filterByName.ts | 2 +- .../src/IntervalInput/IntervalInput.tsx | 7 ++-- .../src/IntervalInput/validation.test.ts | 34 +++++++++---------- .../src/IntervalInput/validation.ts | 2 +- 5 files changed, 23 insertions(+), 24 deletions(-) diff --git a/packages/grafana-data/src/datetime/rangeutil.ts b/packages/grafana-data/src/datetime/rangeutil.ts index 3168e24dc6f..2a93c282551 100644 --- a/packages/grafana-data/src/datetime/rangeutil.ts +++ b/packages/grafana-data/src/datetime/rangeutil.ts @@ -293,7 +293,7 @@ export function calculateInterval(range: TimeRange, resolution: number, lowLimit }; } -const interval_regex = /(-?\d+(?:\.\d+)?)(ms|[Mwdhmsy])/; +const interval_regex = /^(-?\d+(?:\.\d+)?)(ms|[Mwdhmsy])/; // histogram & trends const intervals_in_seconds: Record = { y: 31536000, diff --git a/packages/grafana-data/src/transformations/transformers/filterByName.ts b/packages/grafana-data/src/transformations/transformers/filterByName.ts index 0f58d0b3f95..8f41b4a6e1a 100644 --- a/packages/grafana-data/src/transformations/transformers/filterByName.ts +++ b/packages/grafana-data/src/transformations/transformers/filterByName.ts @@ -47,7 +47,7 @@ export const getMatcherConfig = ( if (byVariable && variable) { const stringOfNames = variable; - if (/\{.*\}/.test(stringOfNames)) { + if (/^\{.*\}$/.test(stringOfNames)) { const namesFromString = stringOfNames.slice(1).slice(0, -1).split(','); return { id: FieldMatcherID.byNames, options: { names: namesFromString } }; } diff --git a/packages/grafana-o11y-ds-frontend/src/IntervalInput/IntervalInput.tsx b/packages/grafana-o11y-ds-frontend/src/IntervalInput/IntervalInput.tsx index 2b29cbea1de..863a6157314 100644 --- a/packages/grafana-o11y-ds-frontend/src/IntervalInput/IntervalInput.tsx +++ b/packages/grafana-o11y-ds-frontend/src/IntervalInput/IntervalInput.tsx @@ -3,7 +3,7 @@ import { useDebounce } from 'react-use'; import { InlineField, Input } from '@grafana/ui'; -import { validateInterval, validateIntervalRegex } from './validation'; +import { validateInterval } from './validation'; interface Props { value: string; @@ -28,14 +28,13 @@ interface FieldProps { } export const IntervalInput = (props: Props) => { - const validationRegex = props.validationRegex || validateIntervalRegex; const [intervalIsInvalid, setIntervalIsInvalid] = useState(() => { - return props.value ? validateInterval(props.value, validationRegex) : false; + return props.value ? validateInterval(props.value, props.validationRegex) : false; }); useDebounce( () => { - setIntervalIsInvalid(validateInterval(props.value, validationRegex)); + setIntervalIsInvalid(validateInterval(props.value, props.validationRegex)); }, 500, [props.value] diff --git a/packages/grafana-o11y-ds-frontend/src/IntervalInput/validation.test.ts b/packages/grafana-o11y-ds-frontend/src/IntervalInput/validation.test.ts index 8de4e2d4327..5d6b3365f21 100644 --- a/packages/grafana-o11y-ds-frontend/src/IntervalInput/validation.test.ts +++ b/packages/grafana-o11y-ds-frontend/src/IntervalInput/validation.test.ts @@ -1,28 +1,28 @@ -import { validateInterval, validateIntervalRegex } from './validation'; +import { validateInterval } from './validation'; describe('Validation', () => { it('should validate incorrect values correctly', () => { - expect(validateInterval('-', validateIntervalRegex)).toBeTruthy(); - expect(validateInterval('1', validateIntervalRegex)).toBeTruthy(); - expect(validateInterval('test', validateIntervalRegex)).toBeTruthy(); - expect(validateInterval('1ds', validateIntervalRegex)).toBeTruthy(); - expect(validateInterval('10Ms', validateIntervalRegex)).toBeTruthy(); - expect(validateInterval('-9999999', validateIntervalRegex)).toBeTruthy(); + expect(validateInterval('-')).toBeTruthy(); + expect(validateInterval('1')).toBeTruthy(); + expect(validateInterval('test')).toBeTruthy(); + expect(validateInterval('1ds')).toBeTruthy(); + expect(validateInterval('10Ms')).toBeTruthy(); + expect(validateInterval('-9999999')).toBeTruthy(); }); it('should validate correct values correctly', () => { - expect(validateInterval('1y', validateIntervalRegex)).toBeFalsy(); - expect(validateInterval('1M', validateIntervalRegex)).toBeFalsy(); - expect(validateInterval('1w', validateIntervalRegex)).toBeFalsy(); - expect(validateInterval('1d', validateIntervalRegex)).toBeFalsy(); - expect(validateInterval('2h', validateIntervalRegex)).toBeFalsy(); - expect(validateInterval('4m', validateIntervalRegex)).toBeFalsy(); - expect(validateInterval('8s', validateIntervalRegex)).toBeFalsy(); - expect(validateInterval('80ms', validateIntervalRegex)).toBeFalsy(); - expect(validateInterval('-80ms', validateIntervalRegex)).toBeFalsy(); + expect(validateInterval('1y')).toBeFalsy(); + expect(validateInterval('1M')).toBeFalsy(); + expect(validateInterval('1w')).toBeFalsy(); + expect(validateInterval('1d')).toBeFalsy(); + expect(validateInterval('2h')).toBeFalsy(); + expect(validateInterval('4m')).toBeFalsy(); + expect(validateInterval('8s')).toBeFalsy(); + expect(validateInterval('80ms')).toBeFalsy(); + expect(validateInterval('-80ms')).toBeFalsy(); }); it('should not return error if no value provided', () => { - expect(validateInterval('', validateIntervalRegex)).toBeFalsy(); + expect(validateInterval('')).toBeFalsy(); }); }); diff --git a/packages/grafana-o11y-ds-frontend/src/IntervalInput/validation.ts b/packages/grafana-o11y-ds-frontend/src/IntervalInput/validation.ts index 44fd754fa2b..28a1ce10393 100644 --- a/packages/grafana-o11y-ds-frontend/src/IntervalInput/validation.ts +++ b/packages/grafana-o11y-ds-frontend/src/IntervalInput/validation.ts @@ -1,6 +1,6 @@ export const validateIntervalRegex = /^(-?\d+(?:\.\d+)?)(ms|[Mwdhmsy])$/; -export const validateInterval = (val: string, regex: RegExp) => { +export const validateInterval = (val: string, regex = validateIntervalRegex) => { const matches = val.match(regex); return matches || !val ? false : true; };