mirror of
https://github.com/kyverno/kyverno.git
synced 2024-12-15 17:51:20 +00:00
Merge pull request #804 from shravanshetty1/786_deepCopy_crash
#786 - subVars crashes
This commit is contained in:
commit
7d76a45667
3 changed files with 23 additions and 12 deletions
|
@ -85,7 +85,7 @@ func Test_variablesub1(t *testing.T) {
|
|||
t.Error(err)
|
||||
}
|
||||
|
||||
if _, err := SubstituteVars(log.Log, ctx, patternCopy); err != nil {
|
||||
if patternCopy, err = SubstituteVars(log.Log, ctx, patternCopy); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
resultRaw, err := json.Marshal(patternCopy)
|
||||
|
@ -175,7 +175,7 @@ func Test_variablesub_multiple(t *testing.T) {
|
|||
t.Error(err)
|
||||
}
|
||||
|
||||
if _, err := SubstituteVars(log.Log, ctx, patternCopy); err != nil {
|
||||
if patternCopy, err = SubstituteVars(log.Log, ctx, patternCopy); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
resultRaw, err := json.Marshal(patternCopy)
|
||||
|
@ -262,7 +262,7 @@ func Test_variablesubstitution(t *testing.T) {
|
|||
t.Error(err)
|
||||
}
|
||||
|
||||
if _, err := SubstituteVars(log.Log, ctx, patternCopy); err != nil {
|
||||
if patternCopy, err = SubstituteVars(log.Log, ctx, patternCopy); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
resultRaw, err := json.Marshal(patternCopy)
|
||||
|
@ -323,7 +323,7 @@ func Test_variableSubstitutionValue(t *testing.T) {
|
|||
t.Error(err)
|
||||
}
|
||||
|
||||
if _, err := SubstituteVars(log.Log, ctx, patternCopy); err != nil {
|
||||
if patternCopy, err = SubstituteVars(log.Log, ctx, patternCopy); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
resultRaw, err := json.Marshal(patternCopy)
|
||||
|
@ -381,7 +381,7 @@ func Test_variableSubstitutionValueOperatorNotEqual(t *testing.T) {
|
|||
t.Error(err)
|
||||
}
|
||||
|
||||
if _, err := SubstituteVars(log.Log, ctx, patternCopy); err != nil {
|
||||
if patternCopy, err = SubstituteVars(log.Log, ctx, patternCopy); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
resultRaw, err := json.Marshal(patternCopy)
|
||||
|
@ -440,7 +440,7 @@ func Test_variableSubstitutionValueFail(t *testing.T) {
|
|||
t.Error(err)
|
||||
}
|
||||
|
||||
if _, err := SubstituteVars(log.Log, ctx, patternCopy); err == nil {
|
||||
if patternCopy, err = SubstituteVars(log.Log, ctx, patternCopy); err == nil {
|
||||
t.Log("expected to fails")
|
||||
t.Fail()
|
||||
}
|
||||
|
@ -498,7 +498,7 @@ func Test_variableSubstitutionObject(t *testing.T) {
|
|||
t.Error(err)
|
||||
}
|
||||
|
||||
if _, err := SubstituteVars(log.Log, ctx, patternCopy); err != nil {
|
||||
if patternCopy, err = SubstituteVars(log.Log, ctx, patternCopy); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
resultRaw, err := json.Marshal(patternCopy)
|
||||
|
@ -562,7 +562,7 @@ func Test_variableSubstitutionObjectOperatorNotEqualFail(t *testing.T) {
|
|||
t.Error(err)
|
||||
}
|
||||
|
||||
if _, err := SubstituteVars(log.Log, ctx, patternCopy); err == nil {
|
||||
if patternCopy, err = SubstituteVars(log.Log, ctx, patternCopy); err == nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
|
@ -621,7 +621,7 @@ func Test_variableSubstitutionMultipleObject(t *testing.T) {
|
|||
t.Error(err)
|
||||
}
|
||||
|
||||
if _, err := SubstituteVars(log.Log, ctx, patternCopy); err != nil {
|
||||
if patternCopy, err = SubstituteVars(log.Log, ctx, patternCopy); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
resultRaw, err := json.Marshal(patternCopy)
|
||||
|
|
|
@ -30,9 +30,17 @@ func SubstituteVars(log logr.Logger, ctx context.EvalInterface, pattern interfac
|
|||
func subVars(log logr.Logger, ctx context.EvalInterface, pattern interface{}, path string, errs *[]error) interface{} {
|
||||
switch typedPattern := pattern.(type) {
|
||||
case map[string]interface{}:
|
||||
return subMap(log, ctx, typedPattern, path, errs)
|
||||
mapCopy := make(map[string]interface{})
|
||||
for k, v := range typedPattern {
|
||||
mapCopy[k] = v
|
||||
}
|
||||
|
||||
return subMap(log, ctx, mapCopy, path, errs)
|
||||
case []interface{}:
|
||||
return subArray(log, ctx, typedPattern, path, errs)
|
||||
sliceCopy := make([]interface{}, len(typedPattern))
|
||||
copy(sliceCopy, typedPattern)
|
||||
|
||||
return subArray(log, ctx, sliceCopy, path, errs)
|
||||
case string:
|
||||
return subValR(log, ctx, typedPattern, path, errs)
|
||||
default:
|
||||
|
|
|
@ -188,9 +188,12 @@ func applyRule(log logr.Logger, client *dclient.Client, rule kyverno.Rule, resou
|
|||
// format : {{<variable_name}}
|
||||
// - if there is variables that are not defined the context -> results in error and rule is not applied
|
||||
// - valid variables are replaced with the values
|
||||
if _, err := variables.SubstituteVars(log, ctx, genUnst.Object); err != nil {
|
||||
object, err := variables.SubstituteVars(log, ctx, genUnst.Object)
|
||||
if err != nil {
|
||||
return noGenResource, err
|
||||
}
|
||||
genUnst.Object, _ = object.(map[string]interface{})
|
||||
|
||||
genKind, _, err := unstructured.NestedString(genUnst.Object, "kind")
|
||||
if err != nil {
|
||||
return noGenResource, err
|
||||
|
|
Loading…
Reference in a new issue