From 40457745e51eb327751de5be4c69c9079db69f66 Mon Sep 17 00:00:00 2001 From: Gordon Klaus Date: Mon, 5 Oct 2015 22:12:46 +0200 Subject: 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 Run-TryBot: Brad Fitzpatrick TryBot-Result: Gobot Gobot --- src/database/sql/convert.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src/database/sql/convert.go') 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 { -- cgit v1.3