diff options
| author | Gordon Klaus <gordon.klaus@gmail.com> | 2015-10-05 22:12:46 +0200 |
|---|---|---|
| committer | Brad Fitzpatrick <bradfitz@golang.org> | 2015-10-06 20:59:00 +0000 |
| commit | 40457745e51eb327751de5be4c69c9079db69f66 (patch) | |
| tree | 5e461df15c60b48668c6ea0096e5132ccac6ad2d /src/database/sql/convert.go | |
| parent | 50ad3372383a8d47804a213b870eb32e251ca18b (diff) | |
| download | go-40457745e51eb327751de5be4c69c9079db69f66.tar.xz | |
database/sql: fix conversions to and from user-defined types
In particular, don't assume that one reflect.Value can be assigned to another just because they have the same reflect.Kind.
Fixes #12401
Change-Id: Ia4605a5c46557ff8f8f1d44f26d492850666c6d1
Reviewed-on: https://go-review.googlesource.com/15420
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'src/database/sql/convert.go')
| -rw-r--r-- | src/database/sql/convert.go | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/database/sql/convert.go b/src/database/sql/convert.go index c0b38a2494..bba5a8843a 100644 --- a/src/database/sql/convert.go +++ b/src/database/sql/convert.go @@ -203,11 +203,16 @@ func convertAssign(dest, src interface{}) error { } dv := reflect.Indirect(dpv) - if dv.Kind() == sv.Kind() { + if sv.IsValid() && sv.Type().AssignableTo(dv.Type()) { dv.Set(sv) return nil } + if dv.Kind() == sv.Kind() && sv.Type().ConvertibleTo(dv.Type()) { + dv.Set(sv.Convert(dv.Type())) + return nil + } + switch dv.Kind() { case reflect.Ptr: if src == nil { |
