diff --git a/transforms.go b/transforms.go index d22a894..6238181 100644 --- a/transforms.go +++ b/transforms.go @@ -392,7 +392,7 @@ func stringRegexpTransform(input any, r v1beta1.StringTransformRegexp) (string, // Return the entire match (group zero) by default. g := ptr.Deref[int](r.Group, 0) - if len(groups) == 0 || g >= len(groups) { + if len(groups) == 0 || g < 0 || g >= len(groups) { return "", errors.Errorf(errStringTransformTypeRegexpNoMatch, r.Match, g) } diff --git a/transforms_test.go b/transforms_test.go index 8414afd..f322cfc 100644 --- a/transforms_test.go +++ b/transforms_test.go @@ -977,6 +977,19 @@ func TestStringResolve(t *testing.T) { err: errors.Errorf(errStringTransformTypeRegexpNoMatch, "my-([0-9]+)-string", 2), }, }, + "RegexpNegativeCaptureGroup": { + args: args{ + stype: v1beta1.StringTransformTypeRegexp, + regexp: &v1beta1.StringTransformRegexp{ + Match: "my-([0-9]+)-string", + Group: ptr.To[int](-1), + }, + i: "my-1-string", + }, + want: want{ + err: errors.Errorf(errStringTransformTypeRegexpNoMatch, "my-([0-9]+)-string", -1), + }, + }, "ConvertToJSONSuccess": { args: args{ stype: v1beta1.StringTransformTypeConvert,