From 704f5b17674d6c5fd58136a507e005ae8883fb24 Mon Sep 17 00:00:00 2001 From: Dmitry Kutakov Date: Sun, 10 Mar 2019 22:17:21 +0300 Subject: [PATCH] not allow default value on array mapping --- binding/binding_test.go | 11 ++++++++--- binding/form_mapping.go | 4 ++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/binding/binding_test.go b/binding/binding_test.go index 4c477d62..b265af36 100644 --- a/binding/binding_test.go +++ b/binding/binding_test.go @@ -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) } diff --git a/binding/form_mapping.go b/binding/form_mapping.go index 6c7c892c..ba9d2c4f 100644 --- a/binding/form_mapping.go +++ b/binding/form_mapping.go @@ -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