Skip to content

Commit 93fd86c

Browse files
fix(jmespath): correct function names in validation errors (kyverno#17093)
Co-authored-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
1 parent be1ebd3 commit 93fd86c

2 files changed

Lines changed: 43 additions & 8 deletions

File tree

pkg/engine/jmespath/functions.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -812,14 +812,14 @@ func jpRegexMatch(arguments []any) (any, error) {
812812
}
813813

814814
func jpPatternMatch(arguments []any) (any, error) {
815-
pattern, err := validateArg(regexMatch, arguments, 0, reflect.String)
815+
pattern, err := validateArg(patternMatch, arguments, 0, reflect.String)
816816
if err != nil {
817817
return nil, err
818818
}
819819

820820
src, err := ifaceToString(arguments[1])
821821
if err != nil {
822-
return nil, formatError(invalidArgumentTypeError, regexMatch, 2, "String or Real")
822+
return nil, formatError(invalidArgumentTypeError, patternMatch, 2, "String or Real")
823823
}
824824

825825
return wildcard.Match(pattern.String(), src), nil
@@ -952,7 +952,7 @@ func jpRound(arguments []any) (any, error) {
952952

953953
func jpBase64Decode(arguments []any) (any, error) {
954954
var err error
955-
str, err := validateArg("", arguments, 0, reflect.String)
955+
str, err := validateArg(base64Decode, arguments, 0, reflect.String)
956956
if err != nil {
957957
return nil, err
958958
}
@@ -967,7 +967,7 @@ func jpBase64Decode(arguments []any) (any, error) {
967967

968968
func jpBase64Encode(arguments []any) (any, error) {
969969
var err error
970-
str, err := validateArg("", arguments, 0, reflect.String)
970+
str, err := validateArg(base64Encode, arguments, 0, reflect.String)
971971
if err != nil {
972972
return nil, err
973973
}
@@ -1275,7 +1275,7 @@ func jpImageNormalize(configuration config.Configuration) gojmespath.JpFunction
12751275

12761276
func jpIsExternalURL(arguments []any) (any, error) {
12771277
var err error
1278-
str, err := validateArg(pathCanonicalize, arguments, 0, reflect.String)
1278+
str, err := validateArg(isExternalURL, arguments, 0, reflect.String)
12791279
if err != nil {
12801280
return nil, err
12811281
}
@@ -1302,7 +1302,7 @@ func jpIsExternalURL(arguments []any) (any, error) {
13021302

13031303
func jpSha256(arguments []any) (any, error) {
13041304
var err error
1305-
str, err := validateArg("", arguments, 0, reflect.String)
1305+
str, err := validateArg(SHA256, arguments, 0, reflect.String)
13061306
if err != nil {
13071307
return nil, err
13081308
}
@@ -1317,7 +1317,7 @@ func jpSha256(arguments []any) (any, error) {
13171317

13181318
func jpSha1(arguments []any) (any, error) {
13191319
var err error
1320-
str, err := validateArg("", arguments, 0, reflect.String)
1320+
str, err := validateArg(SHA1, arguments, 0, reflect.String)
13211321
if err != nil {
13221322
return nil, err
13231323
}
@@ -1332,7 +1332,7 @@ func jpSha1(arguments []any) (any, error) {
13321332

13331333
func jpMd5(arguments []any) (any, error) {
13341334
var err error
1335-
str, err := validateArg("", arguments, 0, reflect.String)
1335+
str, err := validateArg(MD5, arguments, 0, reflect.String)
13361336
if err != nil {
13371337
return nil, err
13381338
}

pkg/engine/jmespath/functions_test.go

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1790,3 +1790,38 @@ func Test_MD5(t *testing.T) {
17901790
assert.Assert(t, ok)
17911791
assert.Equal(t, str, "def42e1abd2462df1f9f0a4b3d488221")
17921792
}
1793+
1794+
func Test_CustomFunctions_ValidationErrors(t *testing.T) {
1795+
t.Run("is_external_url", func(t *testing.T) {
1796+
_, err := jpIsExternalURL([]any{123})
1797+
assert.ErrorContains(t, err, "JMESPath function 'is_external_url': argument #1 is not of type string")
1798+
})
1799+
t.Run("pattern_match arg 1", func(t *testing.T) {
1800+
_, err := jpPatternMatch([]any{123, "foo"})
1801+
assert.ErrorContains(t, err, "JMESPath function 'pattern_match': argument #1 is not of type string")
1802+
})
1803+
t.Run("pattern_match arg 2", func(t *testing.T) {
1804+
_, err := jpPatternMatch([]any{"foo", []any{}})
1805+
assert.ErrorContains(t, err, "JMESPath function 'pattern_match': argument #2 is not of type String or Real")
1806+
})
1807+
t.Run("base64_decode", func(t *testing.T) {
1808+
_, err := jpBase64Decode([]any{123})
1809+
assert.ErrorContains(t, err, "JMESPath function 'base64_decode': argument #1 is not of type string")
1810+
})
1811+
t.Run("base64_encode", func(t *testing.T) {
1812+
_, err := jpBase64Encode([]any{123})
1813+
assert.ErrorContains(t, err, "JMESPath function 'base64_encode': argument #1 is not of type string")
1814+
})
1815+
t.Run("sha256", func(t *testing.T) {
1816+
_, err := jpSha256([]any{123})
1817+
assert.ErrorContains(t, err, "JMESPath function 'sha256': argument #1 is not of type string")
1818+
})
1819+
t.Run("sha1", func(t *testing.T) {
1820+
_, err := jpSha1([]any{123})
1821+
assert.ErrorContains(t, err, "JMESPath function 'sha1': argument #1 is not of type string")
1822+
})
1823+
t.Run("md5", func(t *testing.T) {
1824+
_, err := jpMd5([]any{123})
1825+
assert.ErrorContains(t, err, "JMESPath function 'md5': argument #1 is not of type string")
1826+
})
1827+
}

0 commit comments

Comments
 (0)