Skip to content

Commit 024a390

Browse files
joeybloggsjoeybloggs
authored andcommitted
100% test coverage
1 parent 735aeef commit 024a390

File tree

3 files changed

+143
-305
lines changed

3 files changed

+143
-305
lines changed

form.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,7 @@ func (d *formDecoder) traverseStruct(v reflect.Value, namespace string) (set boo
219219
// is anonymous struct, cannot parse or cache as
220220
// it has no name to index by
221221
if len(typ.Name()) == 0 {
222+
222223
numFields := v.NumField()
223224
var fld reflect.StructField
224225
var key string
@@ -391,7 +392,11 @@ func (d *formDecoder) setFieldByType(current reflect.Value, namespace string, id
391392
if v.IsNil() {
392393
varr = reflect.MakeSlice(v.Type(), sl, sl)
393394
} else if v.Len() < sl {
394-
varr = reflect.MakeSlice(v.Type(), sl, sl)
395+
if v.Cap() <= sl {
396+
varr = reflect.MakeSlice(v.Type(), sl, sl)
397+
} else {
398+
varr = reflect.MakeSlice(v.Type(), sl, v.Cap())
399+
}
395400
reflect.Copy(varr, v)
396401
} else {
397402
varr = v
@@ -426,7 +431,11 @@ func (d *formDecoder) setFieldByType(current reflect.Value, namespace string, id
426431
if v.IsNil() {
427432
varr = reflect.MakeSlice(v.Type(), len(arr), len(arr))
428433
} else if v.Len() < len(arr) {
429-
varr = reflect.MakeSlice(v.Type(), len(arr), len(arr))
434+
if v.Cap() <= len(arr) {
435+
varr = reflect.MakeSlice(v.Type(), len(arr), len(arr))
436+
} else {
437+
varr = reflect.MakeSlice(v.Type(), len(arr), v.Cap())
438+
}
430439
reflect.Copy(varr, v)
431440
} else {
432441
existing = true
@@ -520,7 +529,8 @@ func (d *formDecoder) getMapKey(key string, current reflect.Value, namespace str
520529
v, kind := d.d.ExtractType(current)
521530

522531
switch kind {
523-
case reflect.Interface, reflect.Invalid:
532+
case reflect.Interface:
533+
v.Set(reflect.ValueOf(key))
524534
return
525535
case reflect.Ptr:
526536

0 commit comments

Comments
 (0)