diff --git a/server/opts.go b/server/opts.go index 2b69413c..765a9b56 100644 --- a/server/opts.go +++ b/server/opts.go @@ -2690,7 +2690,7 @@ func parseAccountMappings(v interface{}, acc *Account, errors *[]error, warnings // Now add them in.. if err := acc.AddWeightedMappings(subj, mappings...); err != nil { - err := &configErr{tk, fmt.Sprintf("Error adding mapping for %q to %q : %v", subj, v.(string), err)} + err := &configErr{tk, fmt.Sprintf("Error adding mapping for %q : %v", subj, err)} *errors = append(*errors, err) continue } @@ -2702,7 +2702,7 @@ func parseAccountMappings(v interface{}, acc *Account, errors *[]error, warnings } // Now add it in.. if err := acc.AddWeightedMappings(subj, mdest); err != nil { - err := &configErr{tk, fmt.Sprintf("Error adding mapping for %q to %q : %v", subj, v.(string), err)} + err := &configErr{tk, fmt.Sprintf("Error adding mapping for %q : %v", subj, err)} *errors = append(*errors, err) continue } diff --git a/server/subject_transform.go b/server/subject_transform.go index 4ac93144..4c53a824 100644 --- a/server/subject_transform.go +++ b/server/subject_transform.go @@ -114,6 +114,12 @@ func NewSubjectTransformWithStrict(src, dest string, strict bool) (*subjectTrans } } + if npwcs == 0 { + if tranformType != NoTransform { + return nil, &mappingDestinationErr{token, ErrorMappingDestinationFunctionWildcardIndexOutOfRange} + } + } + if tranformType == NoTransform { dtokMappingFunctionTypes = append(dtokMappingFunctionTypes, NoTransform) dtokMappingFunctionTokenIndexes = append(dtokMappingFunctionTokenIndexes, []int{-1}) @@ -140,6 +146,18 @@ func NewSubjectTransformWithStrict(src, dest string, strict bool) (*subjectTrans // not all wildcards are being used in the destination return nil, &mappingDestinationErr{dest, ErrMappingDestinationNotUsingAllWildcards} } + } else { + // no wildcards used in the source: check that no transform functions are used in the destination + for _, token := range dtokens { + tranformType, _, _, _, err := indexPlaceHolders(token) + if err != nil { + return nil, err + } + + if tranformType != NoTransform { + return nil, &mappingDestinationErr{token, ErrorMappingDestinationFunctionWildcardIndexOutOfRange} + } + } } return &subjectTransform{ diff --git a/server/subject_transform_test.go b/server/subject_transform_test.go index 48ebcf55..bf06c45f 100644 --- a/server/subject_transform_test.go +++ b/server/subject_transform_test.go @@ -149,6 +149,7 @@ func TestSubjectTransforms(t *testing.T) { shouldErr("foo.*", "foo.{{wildcard(1,2)}}", false) // Too many arguments passed to the mapping function shouldErr("foo.*", "foo.{{ wildcard5) }}", false) // Bad mapping function shouldErr("foo.*", "foo.{{splitLeft(2,2}}", false) // arg out of range + shouldErr("foo", "bla.{{wildcard(1)}}", false) // arg out of range with no wildcard in the source shouldBeOK := func(src, dest string, strict bool) *subjectTransform { t.Helper()