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

View File

@ -6,6 +6,7 @@ package binding
import ( import (
"errors" "errors"
"fmt"
"reflect" "reflect"
"strconv" "strconv"
"strings" "strings"
@ -122,6 +123,9 @@ func tryToSetValue(value reflect.Value, field reflect.StructField, form map[stri
if !ok { if !ok {
vs = []string{defaultValue} 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) return true, setArray(vs, value, field)
default: default:
var val string var val string