mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-29 06:27:05 +00:00
apiextensions: fix object keys in fuzzer to exclude escape characters
Jsoniter requires this.
This commit is contained in:
parent
54a4de04c0
commit
9603696116
@ -58,8 +58,24 @@ func Funcs(codecs runtimeserializer.CodecFactory) []interface{} {
|
|||||||
case reflect.Interface, reflect.Map, reflect.Slice, reflect.Ptr:
|
case reflect.Interface, reflect.Map, reflect.Slice, reflect.Ptr:
|
||||||
isValue = false
|
isValue = false
|
||||||
}
|
}
|
||||||
if isValue || c.Intn(5) == 0 {
|
if isValue || c.Intn(10) == 0 {
|
||||||
c.Fuzz(vobj.Field(i).Addr().Interface())
|
c.Fuzz(vobj.Field(i).Addr().Interface())
|
||||||
|
|
||||||
|
// JSON keys must not contain escape char with our JSON codec (jsoniter)
|
||||||
|
// TODO: remove this when/if we moved from jsoniter.ConfigFastest to ConfigCompatibleWithStandardLibrary
|
||||||
|
if field.Type.Kind() == reflect.Map {
|
||||||
|
keys := append([]reflect.Value(nil), vobj.Field(i).MapKeys()...)
|
||||||
|
for _, k := range keys {
|
||||||
|
stripped := toJSONString(k.String())
|
||||||
|
if stripped == k.String() {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
// set new key
|
||||||
|
vobj.Field(i).SetMapIndex(reflect.ValueOf(stripped), vobj.Field(i).MapIndex(k))
|
||||||
|
// remove old
|
||||||
|
vobj.Field(i).SetMapIndex(k, reflect.Value{})
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -109,3 +125,13 @@ func Funcs(codecs runtimeserializer.CodecFactory) []interface{} {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func toJSONString(s string) string {
|
||||||
|
return strings.Map(func(r rune) rune {
|
||||||
|
// replace chars which are not supported in keys by jsoniter.ConfigFastest
|
||||||
|
if r == '\\' || r == '"' {
|
||||||
|
return 'x'
|
||||||
|
}
|
||||||
|
return r
|
||||||
|
}, s)
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user