aboutsummaryrefslogtreecommitdiff
path: root/src/database/sql/convert.go
diff options
context:
space:
mode:
authorGordon Klaus <gordon.klaus@gmail.com>2015-10-05 22:12:46 +0200
committerBrad Fitzpatrick <bradfitz@golang.org>2015-10-06 20:59:00 +0000
commit40457745e51eb327751de5be4c69c9079db69f66 (patch)
tree5e461df15c60b48668c6ea0096e5132ccac6ad2d /src/database/sql/convert.go
parent50ad3372383a8d47804a213b870eb32e251ca18b (diff)
downloadgo-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.go7
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 {