not allow default value on array mapping

This commit is contained in:
Dmitry Kutakov 2019-03-10 22:17:21 +03:00
parent 0450799407
commit 704f5b1767
2 changed files with 12 additions and 3 deletions

View File

@ -1439,8 +1439,8 @@ func TestBindingArray(t *testing.T) {
// default
req := formPostRequest("", "")
err := Form.Bind(req, &s)
assert.NoError(t, err)
assert.Equal(t, [2]int{4, 0}, s.Nums)
assert.Error(t, err)
assert.Equal(t, [2]int{0, 0}, s.Nums)
// ok
req = formPostRequest("", "nums=3&nums=8")
@ -1448,8 +1448,13 @@ func TestBindingArray(t *testing.T) {
assert.NoError(t, err)
assert.Equal(t, [2]int{3, 8}, s.Nums)
// not enough vals
req = formPostRequest("", "nums=3")
err = Form.Bind(req, &s)
assert.Error(t, err)
// error
req = formPostRequest("", "nums=wrong")
req = formPostRequest("", "nums=3&nums=wrong")
err = Form.Bind(req, &s)
assert.Error(t, err)
}

View File

@ -6,6 +6,7 @@ package binding
import (
"errors"
"fmt"
"reflect"
"strconv"
"strings"
@ -122,6 +123,9 @@ func tryToSetValue(value reflect.Value, field reflect.StructField, form map[stri
if !ok {
vs = []string{defaultValue}
}
if len(vs) != value.Len() {
return false, fmt.Errorf("%q is not valid value for %s", vs, value.Type().String())
}
return true, setArray(vs, value, field)
default:
var val string