mirror of
https://github.com/gin-gonic/gin.git
synced 2025-12-13 13:12:17 +08:00
Merge 8b7e6f4295b597728c286a51eadb7db59e907771 into e88fc8927a52b74f55bec0351604a56ac0aa1c51
This commit is contained in:
commit
043e199fbb
@ -28,6 +28,8 @@ var (
|
|||||||
ErrConvertToMapString = errors.New("can not convert to map of strings")
|
ErrConvertToMapString = errors.New("can not convert to map of strings")
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const maxIterDepth = 255
|
||||||
|
|
||||||
func mapURI(ptr any, m map[string][]string) error {
|
func mapURI(ptr any, m map[string][]string) error {
|
||||||
return mapFormByTag(ptr, m, "uri")
|
return mapFormByTag(ptr, m, "uri")
|
||||||
}
|
}
|
||||||
@ -76,15 +78,17 @@ func (form formSource) TrySet(value reflect.Value, field reflect.StructField, ta
|
|||||||
}
|
}
|
||||||
|
|
||||||
func mappingByPtr(ptr any, setter setter, tag string) error {
|
func mappingByPtr(ptr any, setter setter, tag string) error {
|
||||||
_, err := mapping(reflect.ValueOf(ptr), emptyField, setter, tag)
|
_, err := mapping(reflect.ValueOf(ptr), emptyField, setter, tag, 0)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func mapping(value reflect.Value, field reflect.StructField, setter setter, tag string) (bool, error) {
|
func mapping(value reflect.Value, field reflect.StructField, setter setter, tag string, depth int) (bool, error) {
|
||||||
if field.Tag.Get(tag) == "-" { // just ignoring this field
|
if field.Tag.Get(tag) == "-" { // just ignoring this field
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
|
if depth > maxIterDepth {
|
||||||
|
return false, fmt.Errorf("deep of nesting is too high > %d", maxIterDepth)
|
||||||
|
}
|
||||||
vKind := value.Kind()
|
vKind := value.Kind()
|
||||||
|
|
||||||
if vKind == reflect.Ptr {
|
if vKind == reflect.Ptr {
|
||||||
@ -94,7 +98,7 @@ func mapping(value reflect.Value, field reflect.StructField, setter setter, tag
|
|||||||
isNew = true
|
isNew = true
|
||||||
vPtr = reflect.New(value.Type().Elem())
|
vPtr = reflect.New(value.Type().Elem())
|
||||||
}
|
}
|
||||||
isSet, err := mapping(vPtr.Elem(), field, setter, tag)
|
isSet, err := mapping(vPtr.Elem(), field, setter, tag, depth+1)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
@ -123,7 +127,7 @@ func mapping(value reflect.Value, field reflect.StructField, setter setter, tag
|
|||||||
if sf.PkgPath != "" && !sf.Anonymous { // unexported
|
if sf.PkgPath != "" && !sf.Anonymous { // unexported
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
ok, err := mapping(value.Field(i), sf, setter, tag)
|
ok, err := mapping(value.Field(i), sf, setter, tag, depth+1)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user