From b13f7b9e148cd19b2021c306fd97769cff69ab45 Mon Sep 17 00:00:00 2001 From: Lukasz Mierzwa Date: Fri, 17 Nov 2023 11:01:09 +0000 Subject: [PATCH] Fix false positive reports from promq/regexp Fixes #782. --- docs/changelog.md | 6 ++++++ internal/checks/promql_regexp.go | 8 ++++++++ internal/checks/promql_regexp_test.go | 7 +++++++ 3 files changed, 21 insertions(+) diff --git a/docs/changelog.md b/docs/changelog.md index ec9e99ce..02b11d33 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -1,5 +1,11 @@ # Changelog +## v0.49.2 + +### Fixed + +- Fixed false positive reports from `promql/regexp` - #782. + ## v0.49.1 ### Fixed diff --git a/internal/checks/promql_regexp.go b/internal/checks/promql_regexp.go index 5b0485d0..85fae50a 100644 --- a/internal/checks/promql_regexp.go +++ b/internal/checks/promql_regexp.go @@ -53,7 +53,15 @@ func (c RegexpCheck) Check(_ context.Context, _ string, rule parser.Rule, _ []di var isUseful bool var beginText, endText int r, _ := syntax.Parse(re, syntax.Perl) + if r.Flags > 0 && r.Flags != syntax.Perl { + // If effective flags are different from default flags then we assume regexp is useful. + // It could be case sensitive match. + isUseful = true + } for _, s := range r.Sub { + if s.Flags > 0 && s.Flags != syntax.Perl { + isUseful = true + } // nolint: exhaustive switch s.Op { case syntax.OpBeginText: diff --git a/internal/checks/promql_regexp_test.go b/internal/checks/promql_regexp_test.go index 59da655f..2c5afd13 100644 --- a/internal/checks/promql_regexp_test.go +++ b/internal/checks/promql_regexp_test.go @@ -174,6 +174,13 @@ func TestRegexpCheck(t *testing.T) { } }, }, + { + description: "regexp with a modifier", + content: "- record: foo\n expr: foo{job=~\"(?i)someone\"}\n", + checker: newRegexpCheck, + prometheus: noProm, + problems: noProblems, + }, } runTests(t, testCases) }