From a769a7eeb78e786cc0663823a7bfa514d7a07149 Mon Sep 17 00:00:00 2001 From: Nick Pillitteri <56quarters@users.noreply.github.com> Date: Mon, 12 Jan 2026 10:51:45 -0500 Subject: [PATCH] model/labels: fix regex with capture, wildcards, literal (#17828) This change fixes an issue introduced in #17707. When a regex with a wildcard, literal, and final wildcard surounded by a capture group was parsed - the capture group was not removed first preventing `optimizeConcatRegex` from running. Found via fuzz testing. Signed-off-by: Nick Pillitteri --- model/labels/regexp.go | 4 ++++ model/labels/regexp_test.go | 1 + 2 files changed, 5 insertions(+) diff --git a/model/labels/regexp.go b/model/labels/regexp.go index a4bdf885ee..5f4f753419 100644 --- a/model/labels/regexp.go +++ b/model/labels/regexp.go @@ -71,6 +71,10 @@ func NewFastRegexMatcher(v string) (*FastRegexMatcher, error) { if err != nil { return nil, err } + + // Remove any capture operations before trying to optimize the remaining operations. + clearCapture(parsed) + if parsed.Op == syntax.OpConcat { m.prefix, m.suffix, m.contains = optimizeConcatRegex(parsed) } diff --git a/model/labels/regexp_test.go b/model/labels/regexp_test.go index 85cbe02a1f..d4385c7481 100644 --- a/model/labels/regexp_test.go +++ b/model/labels/regexp_test.go @@ -93,6 +93,7 @@ var ( "(.+)-(.+)-(.+)-(.+)-(.+)", "((.*))(?i:f)((.*))o((.*))o((.*))", "((.*))f((.*))(?i:o)((.*))o((.*))", + "(.*0.*)", } values = []string{ "foo", " foo bar", "bar", "buzz\nbar", "bar foo", "bfoo", "\n", "\nfoo", "foo\n", "hello foo world", "hello foo\n world", "",