From 9c9f85d7ff62e3f4f248f9761aae477f8510bcf9 Mon Sep 17 00:00:00 2001 From: Ariel Mashraki Date: Sat, 9 Jan 2021 16:07:43 +0200 Subject: [PATCH] dialect/sql: add checks for scanning validity --- dialect/sql/scan.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/dialect/sql/scan.go b/dialect/sql/scan.go index 83d36f8f5..b866c1889 100644 --- a/dialect/sql/scan.go +++ b/dialect/sql/scan.go @@ -87,7 +87,17 @@ func ScanSlice(rows ColumnScanner, v interface{}) error { if err != nil { return fmt.Errorf("sql/scan: failed getting column names: %v", err) } - rv := reflect.Indirect(reflect.ValueOf(v)) + rv := reflect.ValueOf(v) + switch { + case rv.Kind() != reflect.Ptr: + if t := reflect.TypeOf(v); t != nil { + return fmt.Errorf("sql/scan: ScanSlice(non-pointer %s)", t) + } + fallthrough + case rv.IsNil(): + return fmt.Errorf("sql/scan: ScanSlice(nil)") + } + rv = reflect.Indirect(rv) if k := rv.Kind(); k != reflect.Slice { return fmt.Errorf("sql/scan: invalid type %s. expected slice as an argument", k) }