From 735d91ec1814add85413b17ed7469c603b923d48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89mile=20R=C3=A9?= Date: Mon, 15 Dec 2025 17:38:44 +0100 Subject: [PATCH] Handle byte slice in Scan MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Émile Ré --- pkg/gid/gid.go | 30 ++++++++++++++++++------------ pkg/mail/addr.go | 20 +++++++++++++------- 2 files changed, 31 insertions(+), 19 deletions(-) diff --git a/pkg/gid/gid.go b/pkg/gid/gid.go index 399b7cf67..45583ed10 100644 --- a/pkg/gid/gid.go +++ b/pkg/gid/gid.go @@ -94,22 +94,28 @@ func (gid GID) Timestamp() time.Time { // Scan implements the database/sql/driver.Scanner interface func (gid *GID) Scan(value interface{}) error { + var str string switch v := value.(type) { case string: - enc := base64.RawURLEncoding - id, err := enc.DecodeString(v) - if err != nil { - return err - } - - if len(id) != GIDSize { - return fmt.Errorf("invalid length for GID: got %d, want %d", len(id), GIDSize) - } - - copy((*gid)[:], id) + str = v + case []byte: + str = string(v) default: - return fmt.Errorf("invalid type for GID: expected string, got %T", value) + return fmt.Errorf("invalid type %T for GID", value) } + + enc := base64.RawURLEncoding + id, err := enc.DecodeString(str) + if err != nil { + return err + } + + if len(id) != GIDSize { + return fmt.Errorf("invalid length for GID: got %d, want %d", len(id), GIDSize) + } + + copy((*gid)[:], id) + return nil } diff --git a/pkg/mail/addr.go b/pkg/mail/addr.go index f8923138e..2ae6a56c2 100644 --- a/pkg/mail/addr.go +++ b/pkg/mail/addr.go @@ -53,17 +53,23 @@ func (a *Addr) Scan(value any) error { return nil } + var str string switch v := value.(type) { case string: - parsed, err := ParseAddr(v) - if err != nil { - return err - } - - *a = parsed + str = v + case []byte: + str = string(v) default: - return fmt.Errorf("invalid type for mail.Addr: expected string, got %T", value) + return fmt.Errorf("invalid type %T for mail.Addr", value) } + + parsed, err := ParseAddr(str) + if err != nil { + return err + } + + *a = parsed + return nil }